aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/linden/indra/newview
diff options
context:
space:
mode:
authorJacek Antonelli2008-08-15 23:45:50 -0500
committerJacek Antonelli2008-08-15 23:45:50 -0500
commit2a4dea528f670b9bb1f77ef27a8a1dd16603d114 (patch)
tree95c68e362703c9099d571ecbdc6142b1cda1e005 /linden/indra/newview
parentSecond Life viewer sources 1.20.6 (diff)
downloadmeta-impy-2a4dea528f670b9bb1f77ef27a8a1dd16603d114.zip
meta-impy-2a4dea528f670b9bb1f77ef27a8a1dd16603d114.tar.gz
meta-impy-2a4dea528f670b9bb1f77ef27a8a1dd16603d114.tar.bz2
meta-impy-2a4dea528f670b9bb1f77ef27a8a1dd16603d114.tar.xz
Second Life viewer sources 1.20.7
Diffstat (limited to '')
-rw-r--r--linden/indra/newview/English.lproj/InfoPlist.strings4
-rw-r--r--linden/indra/newview/Info-SecondLife.plist2
-rw-r--r--linden/indra/newview/app_settings/cmd_line.xml670
-rw-r--r--linden/indra/newview/app_settings/keywords.ini4
-rw-r--r--linden/indra/newview/app_settings/logcontrol.xml47
-rw-r--r--linden/indra/newview/app_settings/settings.xml18732
-rw-r--r--linden/indra/newview/app_settings/skinned_avatar.vp146
-rw-r--r--linden/indra/newview/app_settings/skinned_avatar_hair_wind.vp179
-rw-r--r--linden/indra/newview/app_settings/skinned_avatar_nobump.vp128
-rw-r--r--linden/indra/newview/app_settings/skinned_avatar_select.vp60
-rw-r--r--linden/indra/newview/app_settings/skinned_avatar_wind.vp211
-rw-r--r--linden/indra/newview/files.lst4
-rw-r--r--linden/indra/newview/installers/windows/installer_template.nsi21
-rw-r--r--linden/indra/newview/linux_tools/client-readme.txt50
l---------linden/indra/newview/linux_tools/unicode.ttf1
-rwxr-xr-xlinden/indra/newview/linux_tools/wrapper.sh4
-rw-r--r--linden/indra/newview/llagent.cpp1
-rw-r--r--linden/indra/newview/llanimstatelabels.cpp (renamed from linden/indra/llwindow/llwindowlinux.cpp)36
-rw-r--r--linden/indra/newview/llanimstatelabels.h (renamed from linden/indra/llrender/llvertexprogramgl.h)33
-rw-r--r--linden/indra/newview/llappviewer.cpp383
-rw-r--r--linden/indra/newview/llappviewer.h19
-rw-r--r--linden/indra/newview/llappviewerlinux.cpp32
-rw-r--r--linden/indra/newview/llappviewermacosx.cpp13
-rw-r--r--linden/indra/newview/llappviewerwin32.cpp75
-rw-r--r--linden/indra/newview/llbox.cpp2
-rw-r--r--linden/indra/newview/llchatbar.cpp1
-rw-r--r--linden/indra/newview/llcolorswatch.cpp2
-rw-r--r--linden/indra/newview/llcommandlineparser.cpp33
-rw-r--r--linden/indra/newview/llcompilequeue.cpp2
-rw-r--r--linden/indra/newview/llconsole.cpp34
-rw-r--r--linden/indra/newview/llcubemap.cpp44
-rw-r--r--linden/indra/newview/llcubemap.h1
-rw-r--r--linden/indra/newview/llcurrencyuimanager.cpp5
-rw-r--r--linden/indra/newview/lldrawable.cpp8
-rw-r--r--linden/indra/newview/lldrawpool.cpp2
-rw-r--r--linden/indra/newview/lldrawpoolalpha.cpp18
-rw-r--r--linden/indra/newview/lldrawpoolalpha.h3
-rw-r--r--linden/indra/newview/lldrawpoolavatar.cpp59
-rw-r--r--linden/indra/newview/lldrawpoolbump.cpp97
-rw-r--r--linden/indra/newview/lldrawpoolsimple.cpp18
-rw-r--r--linden/indra/newview/lldrawpoolsky.cpp2
-rw-r--r--linden/indra/newview/lldrawpoolterrain.cpp286
-rw-r--r--linden/indra/newview/lldrawpooltree.cpp30
-rw-r--r--linden/indra/newview/lldrawpoolwater.cpp47
-rw-r--r--linden/indra/newview/lldrawpoolwlsky.cpp21
-rw-r--r--linden/indra/newview/lldynamictexture.cpp2
-rw-r--r--linden/indra/newview/llface.cpp6
-rw-r--r--linden/indra/newview/llface.h1
-rw-r--r--linden/indra/newview/llfasttimerview.cpp2
-rw-r--r--linden/indra/newview/llfeaturemanager.cpp58
-rw-r--r--linden/indra/newview/llfeaturemanager.h2
-rw-r--r--linden/indra/newview/llfloateranimpreview.cpp3
-rw-r--r--linden/indra/newview/llfloaterauction.cpp7
-rw-r--r--linden/indra/newview/llfloaterbuyland.cpp5
-rw-r--r--linden/indra/newview/llfloaterchat.cpp21
-rw-r--r--linden/indra/newview/llfloatercolorpicker.cpp2
-rw-r--r--linden/indra/newview/llfloaterdirectory.cpp45
-rw-r--r--linden/indra/newview/llfloaterdirectory.h6
-rw-r--r--linden/indra/newview/llfloatergroupinfo.cpp26
-rw-r--r--linden/indra/newview/llfloatergroups.cpp2
-rw-r--r--linden/indra/newview/llfloaterimagepreview.cpp2
-rw-r--r--linden/indra/newview/llfloaterproperties.cpp35
-rw-r--r--linden/indra/newview/llfloaterproperties.h4
-rw-r--r--linden/indra/newview/llfloaterregioninfo.cpp3
-rw-r--r--linden/indra/newview/llfloaterreporter.cpp4
-rw-r--r--linden/indra/newview/llfloaterreporter.h2
-rw-r--r--linden/indra/newview/llfloatersnapshot.cpp68
-rw-r--r--linden/indra/newview/llfloatertools.cpp13
-rw-r--r--linden/indra/newview/llfolderview.cpp6
-rw-r--r--linden/indra/newview/llframestats.cpp2
-rw-r--r--linden/indra/newview/llgivemoney.cpp16
-rw-r--r--linden/indra/newview/llglsandbox.cpp2
-rw-r--r--linden/indra/newview/llglslshader.cpp116
-rw-r--r--linden/indra/newview/llglslshader.h3
-rw-r--r--linden/indra/newview/llgroupnotify.cpp4
-rw-r--r--linden/indra/newview/llhoverview.cpp79
-rw-r--r--linden/indra/newview/llhudeffectlookat.cpp2
-rw-r--r--linden/indra/newview/llhudeffectpointat.cpp2
-rw-r--r--linden/indra/newview/llhudicon.cpp2
-rw-r--r--linden/indra/newview/llhudtext.cpp5
-rw-r--r--linden/indra/newview/llimpanel.cpp66
-rw-r--r--linden/indra/newview/llimpanel.h13
-rw-r--r--linden/indra/newview/llimview.cpp55
-rw-r--r--linden/indra/newview/llimview.h4
-rw-r--r--linden/indra/newview/llinventorymodel.cpp8
-rw-r--r--linden/indra/newview/lljoystickbutton.cpp2
-rw-r--r--linden/indra/newview/lllogchat.cpp4
-rw-r--r--linden/indra/newview/llmanip.cpp2
-rw-r--r--linden/indra/newview/llmaniprotate.cpp2
-rw-r--r--linden/indra/newview/llmanipscale.cpp2
-rw-r--r--linden/indra/newview/llmaniptranslate.cpp10
-rw-r--r--linden/indra/newview/llmemoryview.cpp4
-rw-r--r--linden/indra/newview/llmutelist.cpp82
-rw-r--r--linden/indra/newview/llmutelist.h10
-rw-r--r--linden/indra/newview/llnetmap.cpp6
-rw-r--r--linden/indra/newview/llnotify.cpp2
-rw-r--r--linden/indra/newview/lloverlaybar.cpp2
-rw-r--r--linden/indra/newview/llpanelclassified.cpp89
-rw-r--r--linden/indra/newview/llpanelclassified.h9
-rw-r--r--linden/indra/newview/llpaneldirbrowser.cpp78
-rw-r--r--linden/indra/newview/llpaneldirbrowser.h1
-rw-r--r--linden/indra/newview/llpaneldirfind.cpp300
-rw-r--r--linden/indra/newview/llpaneldirfind.h58
-rw-r--r--linden/indra/newview/llpaneldirgroups.cpp100
-rw-r--r--linden/indra/newview/llpaneldirgroups.h13
-rw-r--r--linden/indra/newview/llpaneldirplaces.cpp156
-rw-r--r--linden/indra/newview/llpaneldirplaces.h20
-rw-r--r--linden/indra/newview/llpaneldirpopular.cpp97
-rw-r--r--linden/indra/newview/llpaneldirpopular.h21
-rw-r--r--linden/indra/newview/llpaneldisplay.cpp77
-rw-r--r--linden/indra/newview/llpaneldisplay.h13
-rw-r--r--linden/indra/newview/llpanelgroupgeneral.cpp99
-rw-r--r--linden/indra/newview/llpanelgroupgeneral.h4
-rw-r--r--linden/indra/newview/llpanellogin.cpp94
-rw-r--r--linden/indra/newview/llpanellogin.h1
-rw-r--r--linden/indra/newview/llpanelpermissions.cpp13
-rw-r--r--linden/indra/newview/llpolymesh.cpp2
-rw-r--r--linden/indra/newview/llpolymorph.cpp2
-rw-r--r--linden/indra/newview/llpolymorph.h2
-rw-r--r--linden/indra/newview/llpostprocess.cpp89
-rw-r--r--linden/indra/newview/llpostprocess.h7
-rw-r--r--linden/indra/newview/llpreviewgesture.cpp5
-rw-r--r--linden/indra/newview/llpreviewscript.cpp10
-rw-r--r--linden/indra/newview/llprogressview.cpp2
-rw-r--r--linden/indra/newview/llselectmgr.cpp36
-rw-r--r--linden/indra/newview/llspatialpartition.cpp10
-rw-r--r--linden/indra/newview/llstartup.cpp258
-rw-r--r--linden/indra/newview/llstatgraph.cpp2
-rw-r--r--linden/indra/newview/llstatusbar.cpp20
-rw-r--r--linden/indra/newview/llstylemap.cpp75
-rw-r--r--linden/indra/newview/llstylemap.h (renamed from linden/indra/llwindow/llwindowsolaris.cpp)49
-rw-r--r--linden/indra/newview/llsurfacepatch.cpp3
-rw-r--r--linden/indra/newview/lltexlayer.cpp44
-rw-r--r--linden/indra/newview/lltexturecache.cpp26
-rw-r--r--linden/indra/newview/lltexturectrl.cpp2
-rw-r--r--linden/indra/newview/lltexturefetch.cpp18
-rw-r--r--linden/indra/newview/lltextureview.cpp2
-rw-r--r--linden/indra/newview/lltoolbar.cpp9
-rw-r--r--linden/indra/newview/lltoolbrush.cpp2
-rw-r--r--linden/indra/newview/lltooldraganddrop.cpp5
-rw-r--r--linden/indra/newview/lltoolfocus.cpp3
-rw-r--r--linden/indra/newview/lltoolfocus.h1
-rw-r--r--linden/indra/newview/lltoolmorph.cpp2
-rw-r--r--linden/indra/newview/lltoolselectrect.cpp2
-rw-r--r--linden/indra/newview/lltracker.cpp2
-rw-r--r--linden/indra/newview/lltrans.cpp103
-rw-r--r--linden/indra/newview/lltrans.h92
-rw-r--r--linden/indra/newview/lluserauth.cpp20
-rw-r--r--linden/indra/newview/llviewerassetstorage.cpp2
-rw-r--r--linden/indra/newview/llviewercontrol.cpp18
-rw-r--r--linden/indra/newview/llviewerdisplay.cpp54
-rw-r--r--linden/indra/newview/llviewerimagelist.cpp6
-rw-r--r--linden/indra/newview/llviewerinventory.cpp10
-rw-r--r--linden/indra/newview/llviewerinventory.h10
-rw-r--r--linden/indra/newview/llviewerjoint.cpp6
-rw-r--r--linden/indra/newview/llviewerjointattachment.cpp2
-rw-r--r--linden/indra/newview/llviewerjointmesh.cpp53
-rw-r--r--linden/indra/newview/llviewerjoystick.cpp30
-rw-r--r--linden/indra/newview/llviewerkeyboard.cpp2
-rw-r--r--linden/indra/newview/llviewermenu.cpp59
-rw-r--r--linden/indra/newview/llviewermenufile.cpp51
-rw-r--r--linden/indra/newview/llviewermessage.cpp262
-rw-r--r--linden/indra/newview/llviewernetwork.cpp186
-rw-r--r--linden/indra/newview/llviewernetwork.h46
-rw-r--r--linden/indra/newview/llviewerobject.cpp45
-rw-r--r--linden/indra/newview/llviewerobject.h1
-rw-r--r--linden/indra/newview/llviewerobjectlist.cpp3
-rw-r--r--linden/indra/newview/llviewerparcelmedia.cpp10
-rw-r--r--linden/indra/newview/llviewerparceloverlay.cpp47
-rw-r--r--linden/indra/newview/llviewerpartsource.cpp19
-rw-r--r--linden/indra/newview/llviewerpartsource.h1
-rw-r--r--linden/indra/newview/llviewerregion.cpp12
-rw-r--r--linden/indra/newview/llviewerstats.cpp8
-rw-r--r--linden/indra/newview/llviewertexteditor.cpp14
-rw-r--r--linden/indra/newview/llviewerthrottle.cpp4
-rw-r--r--linden/indra/newview/llviewerwindow.cpp68
-rw-r--r--linden/indra/newview/llviewerwindow.h10
-rw-r--r--linden/indra/newview/llvoavatar.cpp375
-rw-r--r--linden/indra/newview/llvoavatar.h29
-rw-r--r--linden/indra/newview/llvocache.cpp8
-rw-r--r--linden/indra/newview/llvocache.h4
-rw-r--r--linden/indra/newview/llvograss.h4
-rw-r--r--linden/indra/newview/llvoiceclient.cpp249
-rw-r--r--linden/indra/newview/llvoiceclient.h4
-rw-r--r--linden/indra/newview/llvoicevisualizer.cpp177
-rw-r--r--linden/indra/newview/llvoicevisualizer.h23
-rw-r--r--linden/indra/newview/llvosky.cpp6
-rw-r--r--linden/indra/newview/llvosky.h23
-rw-r--r--linden/indra/newview/llvosurfacepatch.cpp12
-rw-r--r--linden/indra/newview/llwatchdog.cpp222
-rw-r--r--linden/indra/newview/llwatchdog.h98
-rw-r--r--linden/indra/newview/llwaterparammanager.cpp15
-rw-r--r--linden/indra/newview/llwaterparammanager.h10
-rw-r--r--linden/indra/newview/llwearable.cpp6
-rw-r--r--linden/indra/newview/llwearable.h4
-rw-r--r--linden/indra/newview/llwearablelist.cpp2
-rw-r--r--linden/indra/newview/llwebbrowserctrl.cpp9
-rw-r--r--linden/indra/newview/llwebbrowserctrl.h2
-rw-r--r--linden/indra/newview/llwindebug.cpp154
-rw-r--r--linden/indra/newview/llwindebug.h30
-rw-r--r--linden/indra/newview/llwlparammanager.cpp10
-rw-r--r--linden/indra/newview/llwlparammanager.h5
-rw-r--r--linden/indra/newview/llwlparamset.h8
-rw-r--r--linden/indra/newview/llworld.cpp31
-rw-r--r--linden/indra/newview/llworldmap.cpp18
-rw-r--r--linden/indra/newview/llworldmap.h1
-rw-r--r--linden/indra/newview/llworldmapview.cpp81
-rw-r--r--linden/indra/newview/llworldmapview.h1
-rw-r--r--linden/indra/newview/llxmlrpctransaction.cpp8
-rw-r--r--linden/indra/newview/macview.xcodeproj/project.pbxproj40
-rw-r--r--linden/indra/newview/newview.vcproj27
-rw-r--r--linden/indra/newview/newview_vc8.vcproj44
-rw-r--r--linden/indra/newview/newview_vc9.vcproj36
-rw-r--r--linden/indra/newview/pipeline.cpp185
-rw-r--r--linden/indra/newview/pipeline.h1
-rw-r--r--linden/indra/newview/releasenotes.txt253
-rw-r--r--linden/indra/newview/res/newViewRes.rc8
-rw-r--r--linden/indra/newview/skins/textures/textures.xml4
-rw-r--r--linden/indra/newview/skins/xui/de/floater_html.xml3
-rw-r--r--linden/indra/newview/skins/xui/de/mime_types.xml2
-rw-r--r--linden/indra/newview/skins/xui/de/panel_group_invite.xml5
-rw-r--r--linden/indra/newview/skins/xui/de/panel_group_notices.xml2
-rw-r--r--linden/indra/newview/skins/xui/de/panel_preferences_graphics1.xml2
-rw-r--r--linden/indra/newview/skins/xui/de/panel_preferences_web.xml5
-rw-r--r--linden/indra/newview/skins/xui/en-us/alerts.xml46
-rw-r--r--linden/indra/newview/skins/xui/en-us/floater_directory.xml404
-rw-r--r--linden/indra/newview/skins/xui/en-us/floater_im.xml4
-rw-r--r--linden/indra/newview/skins/xui/en-us/floater_joystick.xml2
-rw-r--r--linden/indra/newview/skins/xui/en-us/floater_script_debug.xml2
-rw-r--r--linden/indra/newview/skins/xui/en-us/floater_snapshot.xml8
-rw-r--r--linden/indra/newview/skins/xui/en-us/floater_world_map.xml28
-rw-r--r--linden/indra/newview/skins/xui/en-us/menu_viewer.xml29
-rw-r--r--linden/indra/newview/skins/xui/en-us/mime_types.xml2
-rw-r--r--linden/indra/newview/skins/xui/en-us/notify.xml20
-rw-r--r--linden/indra/newview/skins/xui/en-us/panel_avatar_classified.xml14
-rw-r--r--linden/indra/newview/skins/xui/en-us/panel_classified.xml19
-rw-r--r--linden/indra/newview/skins/xui/en-us/panel_group_general.xml20
-rw-r--r--linden/indra/newview/skins/xui/en-us/panel_group_notices.xml3
-rw-r--r--linden/indra/newview/skins/xui/en-us/panel_preferences_graphics1.xml36
-rw-r--r--linden/indra/newview/skins/xui/en-us/panel_preferences_web.xml10
-rw-r--r--linden/indra/newview/skins/xui/en-us/panel_region_general.xml10
-rw-r--r--linden/indra/newview/skins/xui/en-us/strings.xml166
-rw-r--r--linden/indra/newview/skins/xui/es/panel_group_notices.xml2
-rw-r--r--linden/indra/newview/skins/xui/fr/panel_group_notices.xml2
-rw-r--r--linden/indra/newview/skins/xui/ja/floater_about.xml2
-rw-r--r--linden/indra/newview/skins/xui/ja/floater_html.xml3
-rw-r--r--linden/indra/newview/skins/xui/ja/floater_joystick.xml93
-rw-r--r--linden/indra/newview/skins/xui/ja/mime_types.xml2
-rw-r--r--linden/indra/newview/skins/xui/ja/panel_group_notices.xml2
-rw-r--r--linden/indra/newview/skins/xui/ja/panel_preferences_graphics1.xml10
-rw-r--r--linden/indra/newview/skins/xui/ja/panel_preferences_web.xml5
-rw-r--r--linden/indra/newview/skins/xui/ja/panel_speaker_controls.xml4
-rw-r--r--linden/indra/newview/skins/xui/ko/floater_chat_history.xml2
-rw-r--r--linden/indra/newview/skins/xui/ko/floater_html.xml3
-rw-r--r--linden/indra/newview/skins/xui/ko/floater_joystick.xml2
-rw-r--r--linden/indra/newview/skins/xui/ko/menu_viewer.xml2
-rw-r--r--linden/indra/newview/skins/xui/ko/mime_types.xml2
-rw-r--r--linden/indra/newview/skins/xui/ko/panel_chat_bar.xml2
-rw-r--r--linden/indra/newview/skins/xui/ko/panel_group_invite.xml5
-rw-r--r--linden/indra/newview/skins/xui/ko/panel_group_notices.xml2
-rw-r--r--linden/indra/newview/skins/xui/ko/panel_preferences_web.xml5
-rw-r--r--linden/indra/newview/skins/xui/pt/panel_group_notices.xml2
-rw-r--r--linden/indra/newview/skins/xui/zh/panel_group_notices.xml2
-rwxr-xr-xlinden/indra/newview/viewer_manifest.py7
264 files changed, 14873 insertions, 13946 deletions
diff --git a/linden/indra/newview/English.lproj/InfoPlist.strings b/linden/indra/newview/English.lproj/InfoPlist.strings
index bb7ddc1..7272173 100644
--- a/linden/indra/newview/English.lproj/InfoPlist.strings
+++ b/linden/indra/newview/English.lproj/InfoPlist.strings
@@ -1,5 +1,5 @@
1/* Localized versions of Info.plist keys */ 1/* Localized versions of Info.plist keys */
2 2
3CFBundleName = "Second Life"; 3CFBundleName = "Second Life";
4CFBundleShortVersionString = "Second Life version 1.19.1.4"; 4CFBundleShortVersionString = "Second Life version 1.20.6.86975";
5CFBundleGetInfoString = "Second Life version 1.19.1.4, Copyright 2004-2008 Linden Research, Inc."; 5CFBundleGetInfoString = "Second Life version 1.20.6.86975, Copyright 2004-2008 Linden Research, Inc.";
diff --git a/linden/indra/newview/Info-SecondLife.plist b/linden/indra/newview/Info-SecondLife.plist
index 492e589..fa50503 100644
--- a/linden/indra/newview/Info-SecondLife.plist
+++ b/linden/indra/newview/Info-SecondLife.plist
@@ -32,7 +32,7 @@
32 </dict> 32 </dict>
33 </array> 33 </array>
34 <key>CFBundleVersion</key> 34 <key>CFBundleVersion</key>
35 <string>1.19.1.4</string> 35 <string>1.20.6.86975</string>
36 <key>CSResourcesFileMapped</key> 36 <key>CSResourcesFileMapped</key>
37 <true/> 37 <true/>
38</dict> 38</dict>
diff --git a/linden/indra/newview/app_settings/cmd_line.xml b/linden/indra/newview/app_settings/cmd_line.xml
index 3e6fa21..746e56d 100644
--- a/linden/indra/newview/app_settings/cmd_line.xml
+++ b/linden/indra/newview/app_settings/cmd_line.xml
@@ -1,335 +1,335 @@
1<?xml version="1.0"?> 1<?xml version="1.0"?>
2<llsd> 2<llsd>
3 <map> 3 <map>
4 <key>help</key> 4 <key>help</key>
5 <map> 5 <map>
6 <key>desc</key> 6 <key>desc</key>
7 <string>display this help message</string> 7 <string>display this help message</string>
8 8
9 <key>short</key> 9 <key>short</key>
10 <string>h</string> 10 <string>h</string>
11 </map> 11 </map>
12 12
13 <key>port</key> 13 <key>port</key>
14 <map> 14 <map>
15 <key>count</key> 15 <key>count</key>
16 <integer>1</integer> 16 <integer>1</integer>
17 <key>map-to</key> 17 <key>map-to</key>
18 <string>UserConnectionPort</string> 18 <string>UserConnectionPort</string>
19 </map> 19 </map>
20 20
21 <key>drop</key> 21 <key>drop</key>
22 <map> 22 <map>
23 <key>count</key> 23 <key>count</key>
24 <integer>1</integer> 24 <integer>1</integer>
25 <key>map-to</key> 25 <key>map-to</key>
26 <string>PacketDropPercentage</string> 26 <string>PacketDropPercentage</string>
27 </map> 27 </map>
28 28
29 <key>inbw</key> 29 <key>inbw</key>
30 <map> 30 <map>
31 <key>count</key> 31 <key>count</key>
32 <integer>1</integer> 32 <integer>1</integer>
33 <key>map-to</key> 33 <key>map-to</key>
34 <string>InBandwidth</string> 34 <string>InBandwidth</string>
35 </map> 35 </map>
36 36
37 <key>outbw</key> 37 <key>outbw</key>
38 <map> 38 <map>
39 <key>count</key> 39 <key>count</key>
40 <integer>1</integer> 40 <integer>1</integer>
41 <key>map-to</key> 41 <key>map-to</key>
42 <string>OutBandwidth</string> 42 <string>OutBandwidth</string>
43 </map> 43 </map>
44 44
45 <key>grid</key> 45 <key>grid</key>
46 <map> 46 <map>
47 <key>desc</key> 47 <key>desc</key>
48 <string>Specify the name of the grid, local, or an IP address to connect to.</string> 48 <string>Specify the name of the grid, local, or an IP address to connect to.</string>
49 <key>count</key> 49 <key>count</key>
50 <integer>1</integer> 50 <integer>1</integer>
51 <key>map-to</key> 51 <key>map-to</key>
52 <string>GridChoice</string> 52 <string>CmdLineGridChoice</string>
53 </map> 53 </map>
54 54
55 <key>loginuri</key> 55 <key>loginuri</key>
56 <map> 56 <map>
57 <key>desc</key> 57 <key>desc</key>
58 <string>login server and CGI script to use</string> 58 <string>login server and CGI script to use</string>
59 <key>count</key> 59 <key>count</key>
60 <integer>1</integer> 60 <integer>1</integer>
61 <key>compose</key> 61 <key>compose</key>
62 <boolean>true</boolean> 62 <boolean>true</boolean>
63 <key>map-to</key> 63 <key>map-to</key>
64 <string>LoginURI</string> 64 <string>CmdLineLoginURI</string>
65 </map> 65 </map>
66 66
67 <key>helperuri</key> 67 <key>helperuri</key>
68 <map> 68 <map>
69 <key>desc</key> 69 <key>desc</key>
70 <string>helper web CGI prefix to use</string> 70 <string>helper web CGI prefix to use</string>
71 <key>count</key> 71 <key>count</key>
72 <integer>1</integer> 72 <integer>1</integer>
73 <key>map-to</key> 73 <key>map-to</key>
74 <string>HelperURI</string> 74 <string>CmdLineHelperURI</string>
75 </map> 75 </map>
76 76
77 <key>debugviews</key> 77 <key>debugviews</key>
78 <map> 78 <map>
79 <key>map-to</key> 79 <key>map-to</key>
80 <string>DebugViews</string> 80 <string>DebugViews</string>
81 </map> 81 </map>
82 82
83 <key>skin</key> 83 <key>skin</key>
84 <map> 84 <map>
85 <key>desc</key> 85 <key>desc</key>
86 <string>ui/branding skin folder to use</string> 86 <string>ui/branding skin folder to use</string>
87 <key>count</key> 87 <key>count</key>
88 <integer>1</integer> 88 <integer>1</integer>
89 <key>map-to</key> 89 <key>map-to</key>
90 <string>SkinFolder</string> 90 <string>SkinFolder</string>
91 </map> 91 </map>
92 92
93 <key>autologin</key> 93 <key>autologin</key>
94 <map> 94 <map>
95 <key>desc</key> 95 <key>desc</key>
96 <string>log in as last saved user</string> 96 <string>log in as last saved user</string>
97 <key>map-to</key> 97 <key>map-to</key>
98 <string>AutoLogin</string> 98 <string>AutoLogin</string>
99 </map> 99 </map>
100 100
101 <key>quitafter</key> 101 <key>quitafter</key>
102 <map> 102 <map>
103 <key>count</key> 103 <key>count</key>
104 <integer>1</integer> 104 <integer>1</integer>
105 <key>map-to</key> 105 <key>map-to</key>
106 <string>QuitAfterSeconds</string> 106 <string>QuitAfterSeconds</string>
107 </map> 107 </map>
108 108
109 <key>rotate</key> 109 <key>rotate</key>
110 <map> 110 <map>
111 <key>map-to</key> 111 <key>map-to</key>
112 <string>RotateRight</string> 112 <string>RotateRight</string>
113 </map> 113 </map>
114 114
115 <key>noaudio</key> 115 <key>noaudio</key>
116 <map> 116 <map>
117 <key>map-to</key> 117 <key>map-to</key>
118 <string>NoAudio</string> 118 <string>NoAudio</string>
119 </map> 119 </map>
120 120
121 <key>nosound</key> 121 <key>nosound</key>
122 <map> 122 <map>
123 <key>map-to</key> 123 <key>map-to</key>
124 <string>NoAudio</string> 124 <string>NoAudio</string>
125 </map> 125 </map>
126 126
127 <key>noprobe</key> 127 <key>noprobe</key>
128 <map> 128 <map>
129 <key>map-to</key> 129 <key>map-to</key>
130 <string>NoHardwareProbe</string> 130 <string>NoHardwareProbe</string>
131 </map> 131 </map>
132 132
133 <key>noquicktime</key> 133 <key>noquicktime</key>
134 <map> 134 <map>
135 <key>map-to</key> 135 <key>map-to</key>
136 <string>NoQuickTime</string> 136 <string>NoQuickTime</string>
137 </map> 137 </map>
138 138
139 <key>nopreload</key> 139 <key>nopreload</key>
140 <map> 140 <map>
141 <key>map-to</key> 141 <key>map-to</key>
142 <string>NoPreload</string> 142 <string>NoPreload</string>
143 </map> 143 </map>
144 144
145 <key>purge</key> 145 <key>purge</key>
146 <map> 146 <map>
147 <key>desc</key> 147 <key>desc</key>
148 <string>Delete files in the cache.</string> 148 <string>Delete files in the cache.</string>
149 <key>map-to</key> 149 <key>map-to</key>
150 <string>PurgeCacheOnNextStartup</string> 150 <string>PurgeCacheOnNextStartup</string>
151 </map> 151 </map>
152 152
153 <key>noinvlib</key> 153 <key>noinvlib</key>
154 <map> 154 <map>
155 <key>desc</key> 155 <key>desc</key>
156 <string>Do not request the inventory library.</string> 156 <string>Do not request the inventory library.</string>
157 <key>map-to</key> 157 <key>map-to</key>
158 <string>NoInventoryLibrary</string> 158 <string>NoInventoryLibrary</string>
159 </map> 159 </map>
160 160
161 <key>logfile</key> 161 <key>logfile</key>
162 <map> 162 <map>
163 <key>count</key> 163 <key>count</key>
164 <integer>1</integer> 164 <integer>1</integer>
165 <key>map-to</key> 165 <key>map-to</key>
166 <string>UserLogFile</string> 166 <string>UserLogFile</string>
167 </map> 167 </map>
168 168
169 <key>setdefault</key> 169 <key>setdefault</key>
170 <map> 170 <map>
171 <key>desc</key> 171 <key>desc</key>
172 <string> specify the value of a particular 172 <string> specify the value of a particular
173 configuration variable which can be 173 configuration variable which can be
174 overridden by settings.xml 174 overridden by settings.xml
175 </string> 175 </string>
176 <key>count</key> 176 <key>count</key>
177 <integer>2</integer> 177 <integer>2</integer>
178 <!-- Special case. Mapped to settings procedurally. --> 178 <!-- Special case. Mapped to settings procedurally. -->
179 </map> 179 </map>
180 180
181 <key>set</key> 181 <key>set</key>
182 <map> 182 <map>
183 <key>desc</key> 183 <key>desc</key>
184 <string> specify the value of a particular 184 <string> specify the value of a particular
185 configuration variable that 185 configuration variable that
186 overrides all other settings 186 overrides all other settings
187 </string> 187 </string>
188 <key>count</key> 188 <key>count</key>
189 <integer>2</integer> 189 <integer>2</integer>
190 <!-- Special case. Mapped to settings procedurally. --> 190 <!-- Special case. Mapped to settings procedurally. -->
191 </map> 191 </map>
192 192
193 <key>settings</key> 193 <key>settings</key>
194 <map> 194 <map>
195 <key>desc</key> 195 <key>desc</key>
196 <string>Specify the filename of a configuration file.</string> 196 <string>Specify the filename of a configuration file.</string>
197 <key>count</key> 197 <key>count</key>
198 <integer>1</integer> 198 <integer>1</integer>
199 <!-- Special case. Mapped to settings procedurally. --> 199 <!-- Special case. Mapped to settings procedurally. -->
200 </map> 200 </map>
201 201
202 <key>login</key> 202 <key>login</key>
203 <map> 203 <map>
204 <key>desc</key> 204 <key>desc</key>
205 <string>3 tokens: first, last and password</string> 205 <string>3 tokens: first, last and password</string>
206 <key>count</key> 206 <key>count</key>
207 <integer>3</integer> 207 <integer>3</integer>
208 <key>map-to</key> 208 <key>map-to</key>
209 <string>UserLoginInfo</string> 209 <string>UserLoginInfo</string>
210 </map> 210 </map>
211 211
212 <key>god</key> 212 <key>god</key>
213 <map> 213 <map>
214 <key>desc</key> 214 <key>desc</key>
215 <string>Log in a god if you have god access.</string> 215 <string>Log in a god if you have god access.</string>
216 <key>map-to</key> 216 <key>map-to</key>
217 <string>ConnectAsGod</string> 217 <string>ConnectAsGod</string>
218 </map> 218 </map>
219 219
220 <key>console</key> 220 <key>console</key>
221 <map> 221 <map>
222 <key>count</key> 222 <key>count</key>
223 <integer>1</integer> 223 <integer>1</integer>
224 <key>map-to</key> 224 <key>map-to</key>
225 <string>ShowConsoleWindow</string> 225 <string>ShowConsoleWindow</string>
226 </map> 226 </map>
227 227
228 <key>safe</key> 228 <key>safe</key>
229 <map> 229 <map>
230 <key>desc</key> 230 <key>desc</key>
231 <string>Reset preferences, run in safe mode.</string> 231 <string>Reset preferences, run in safe mode.</string>
232 <key>map-to</key> 232 <key>map-to</key>
233 <string>SafeMode</string> 233 <string>SafeMode</string>
234 </map> 234 </map>
235 235
236 <key>multiple</key> 236 <key>multiple</key>
237 <map> 237 <map>
238 <key>desc</key> 238 <key>desc</key>
239 <string>Allow multple viewers.</string> 239 <string>Allow multple viewers.</string>
240 <key>map-to</key> 240 <key>map-to</key>
241 <string>AllowMultipleViewers</string> 241 <string>AllowMultipleViewers</string>
242 </map> 242 </map>
243 243
244 <key>novoice</key> 244 <key>novoice</key>
245 <map> 245 <map>
246 <key>desc</key> 246 <key>desc</key>
247 <string>Disable voice.</string> 247 <string>Disable voice.</string>
248 <key>map-to</key> 248 <key>map-to</key>
249 <string>CmdLineDisableVoice</string> 249 <string>CmdLineDisableVoice</string>
250 </map> 250 </map>
251 251
252 <key>url</key> 252 <key>url</key>
253 <map> 253 <map>
254 <key>desc</key> 254 <key>desc</key>
255 <string>Startup location</string> 255 <string>Startup location</string>
256 <key>count</key> 256 <key>count</key>
257 <integer>1</integer> 257 <integer>1</integer>
258 <key>last_option</key> 258 <key>last_option</key>
259 <boolean>true</boolean> 259 <boolean>true</boolean>
260 <!-- Special case. Not mapped to a setting. --> 260 <!-- Special case. Not mapped to a setting. -->
261 </map> 261 </map>
262 262
263 <key>slurl</key> 263 <key>slurl</key>
264 <map> 264 <map>
265 <key>desc</key> 265 <key>desc</key>
266 <string>Startup SLurl</string> 266 <string>Startup SLurl</string>
267 <key>count</key> 267 <key>count</key>
268 <integer>1</integer> 268 <integer>1</integer>
269 <key>positional</key> 269 <key>positional</key>
270 <boolean>true</boolean> 270 <boolean>true</boolean>
271 <key>last_option</key> 271 <key>last_option</key>
272 <boolean>true</boolean> 272 <boolean>true</boolean>
273 <!-- Special case. Not mapped to a setting. --> 273 <!-- Special case. Not mapped to a setting. -->
274 </map> 274 </map>
275 275
276 <key>ignorepixeldepth</key> 276 <key>ignorepixeldepth</key>
277 <map> 277 <map>
278 <key>desc</key> 278 <key>desc</key>
279 <string>Ignore pixel depth settings.</string> 279 <string>Ignore pixel depth settings.</string>
280 <key>map-to</key> 280 <key>map-to</key>
281 <string>IgnorePixelDepth</string> 281 <string>IgnorePixelDepth</string>
282 </map> 282 </map>
283 283
284 <key>cooperative</key> 284 <key>cooperative</key>
285 <map> 285 <map>
286 <key>desc</key> 286 <key>desc</key>
287 <string>Yield some idle time to local host.</string> 287 <string>Yield some idle time to local host.</string>
288 <key>count</key> 288 <key>count</key>
289 <integer>1</integer> 289 <integer>1</integer>
290 <key>map-to</key> 290 <key>map-to</key>
291 <string>YieldTime</string> 291 <string>YieldTime</string>
292 </map> 292 </map>
293 293
294 <key>no-verify-ssl-cert</key> 294 <key>no-verify-ssl-cert</key>
295 <map> 295 <map>
296 <key>map-to</key> 296 <key>map-to</key>
297 <string>NoVerifySSLCert</string> 297 <string>NoVerifySSLCert</string>
298 </map> 298 </map>
299 299
300 <key>channel</key> 300 <key>channel</key>
301 <map> 301 <map>
302 <key>count</key> 302 <key>count</key>
303 <integer>1</integer> 303 <integer>1</integer>
304 <key>map-to</key> 304 <key>map-to</key>
305 <string>VersionChannelName</string> 305 <string>VersionChannelName</string>
306 </map> 306 </map>
307 307
308 <key>loginpage</key> 308 <key>loginpage</key>
309 <map> 309 <map>
310 <key>desc</key> 310 <key>desc</key>
311 <string>Login authentication page to use.</string> 311 <string>Login authentication page to use.</string>
312 <key>count</key> 312 <key>count</key>
313 <integer>1</integer> 313 <integer>1</integer>
314 <key>map-to</key> 314 <key>map-to</key>
315 <string>LoginPage</string> 315 <string>LoginPage</string>
316 </map> 316 </map>
317 317
318 <key>qa</key> 318 <key>qa</key>
319 <map> 319 <map>
320 <key>desc</key> 320 <key>desc</key>
321 <string>Activated debugging menu in Advanced Settings.</string> 321 <string>Activated debugging menu in Advanced Settings.</string>
322 <key>map-to</key> 322 <key>map-to</key>
323 <string>QAMode</string> 323 <string>QAMode</string>
324 </map> 324 </map>
325 325
326 <key>crashonstartup</key> 326 <key>crashonstartup</key>
327 <map> 327 <map>
328 <key>desc</key> 328 <key>desc</key>
329 <string>Crashes on startup. For QA use.</string> 329 <string>Crashes on startup. For QA use.</string>
330 <key>map-to</key> 330 <key>map-to</key>
331 <string>CrashOnStartup</string> 331 <string>CrashOnStartup</string>
332 </map> 332 </map>
333 333
334 </map> 334 </map>
335</llsd> 335</llsd>
diff --git a/linden/indra/newview/app_settings/keywords.ini b/linden/indra/newview/app_settings/keywords.ini
index 9a8b1f7..b6892dc 100644
--- a/linden/indra/newview/app_settings/keywords.ini
+++ b/linden/indra/newview/app_settings/keywords.ini
@@ -507,6 +507,10 @@ CLICK_ACTION_OPEN_MEDIA Used with llSetClickAction to set open-media as the defa
507[word .1, .3, .5] 507[word .1, .3, .5]
508NULL_KEY Indicates an empty key 508NULL_KEY Indicates an empty key
509EOF Indicates the last line of a notecard was read 509EOF Indicates the last line of a notecard was read
510TEXTURE_BLANK UUID for the "Blank" texture
511TEXTURE_DEFAULT UUID for the "Default Media" texture
512TEXTURE_PLYWOOD UUID for the default "Plywood" texture
513TEXTURE_TRANSPARENT UUID for the "White - Transparent" texture
510 514
511# float constants 515# float constants
512[word .3, .1, .5] 516[word .3, .1, .5]
diff --git a/linden/indra/newview/app_settings/logcontrol.xml b/linden/indra/newview/app_settings/logcontrol.xml
new file mode 100644
index 0000000..d7bb64c
--- /dev/null
+++ b/linden/indra/newview/app_settings/logcontrol.xml
@@ -0,0 +1,47 @@
1<llsd>
2 <map>
3 <!-- default-level can be ALL, DEBUG, INFO, WARN, ERROR, or NONE -->
4 <key>default-level</key> <string>INFO</string>
5 <key>print-location</key> <boolean>false</boolean>
6 <key>settings</key>
7 <array>
8 <!-- sample entry for changing settings on specific items -->
9 <map>
10 <key>level</key><string>INFO</string>
11 <key>functions</key>
12 <array>
13 </array>
14 <key>classes</key>
15 <array>
16 </array>
17 <key>files</key>
18 <array>
19 </array>
20 <key>tags</key>
21 <array>
22 <string>AppInit</string>
23 <string>SystemInfo</string>
24 <string>TextureCache</string>
25 <string>AppCache</string>
26 <string>Window</string>
27 <string>RenderInit</string>
28 </array>
29 </map>
30 <map>
31 <key>level</key><string>DEBUG</string>
32 <key>functions</key>
33 <array>
34 </array>
35 <key>classes</key>
36 <array>
37 </array>
38 <key>files</key>
39 <array>
40 </array>
41 <key>tags</key>
42 <array>
43 </array>
44 </map>
45 </array>
46 </map>
47</llsd>
diff --git a/linden/indra/newview/app_settings/settings.xml b/linden/indra/newview/app_settings/settings.xml
index 69ae958..f5e57a5 100644
--- a/linden/indra/newview/app_settings/settings.xml
+++ b/linden/indra/newview/app_settings/settings.xml
@@ -1,10118 +1,10196 @@
1<?xml version="1.0" ?>
1<llsd> 2<llsd>
3<map>
4 <key>AFKTimeout</key>
2 <map> 5 <map>
6 <key>Comment</key>
7 <string>Time before automatically setting AFK (away from keyboard) mode (seconds)</string>
8 <key>Persist</key>
9 <integer>1</integer>
10 <key>Type</key>
11 <string>F32</string>
12 <key>Value</key>
13 <real>300.0</real>
14 </map>
3 <key>AdvanceSnapshot</key> 15 <key>AdvanceSnapshot</key>
4 <map> 16 <map>
5 <key>Comment</key> 17 <key>Comment</key>
6 <string>Display advanced parameter settings in snaphot interface</string> 18 <string>Display advanced parameter settings in snaphot interface</string>
7 <key>Persist</key> 19 <key>Persist</key>
8 <integer>1</integer> 20 <integer>1</integer>
9 <key>Type</key> 21 <key>Type</key>
10 <string>Boolean</string> 22 <string>Boolean</string>
11 <key>Value</key> 23 <key>Value</key>
12 <integer>0</integer> 24 <integer>0</integer>
13 </map> 25 </map>
14 <key>AFKTimeout</key>
15 <map>
16 <key>Comment</key>
17 <string>Time before automatically setting AFK (away from keyboard) mode (seconds)</string>
18 <key>Persist</key>
19 <integer>1</integer>
20 <key>Type</key>
21 <string>F32</string>
22 <key>Value</key>
23 <real>300</real>
24 </map>
25 <key>AgentChatColor</key> 26 <key>AgentChatColor</key>
26 <map> 27 <map>
27 <key>Comment</key> 28 <key>Comment</key>
28 <string>Color of chat messages from other residents</string> 29 <string>Color of chat messages from other residents</string>
29 <key>Persist</key> 30 <key>Persist</key>
30 <integer>1</integer> 31 <integer>1</integer>
31 <key>Type</key> 32 <key>Type</key>
32 <string>Color4</string> 33 <string>Color4</string>
33 <key>Value</key> 34 <key>Value</key>
34 <array> 35 <array>
35 <real>1</real> 36 <real>1.0</real>
36 <real>1</real> 37 <real>1.0</real>
37 <real>1</real> 38 <real>1.0</real>
38 <real>1</real> 39 <real>1.0</real>
39 </array> 40 </array>
40 </map> 41 </map>
41 <key>IMChatColor</key>
42 <map>
43 <key>Comment</key>
44 <string>Color of instant messages from other residents</string>
45 <key>Persist</key>
46 <integer>1</integer>
47 <key>Type</key>
48 <string>Color4</string>
49 <key>Value</key>
50 <array>
51 <real>1</real>
52 <real>1</real>
53 <real>1</real>
54 <real>1</real>
55 </array>
56 </map>
57 <key>AllowIdleAFK</key> 42 <key>AllowIdleAFK</key>
58 <map> 43 <map>
59 <key>Comment</key> 44 <key>Comment</key>
60 <string>Automatically set AFK (away from keyboard) mode when idle</string> 45 <string>Automatically set AFK (away from keyboard) mode when idle</string>
61 <key>Persist</key> 46 <key>Persist</key>
62 <integer>1</integer> 47 <integer>1</integer>
63 <key>Type</key> 48 <key>Type</key>
64 <string>Boolean</string> 49 <string>Boolean</string>
65 <key>Value</key> 50 <key>Value</key>
66 <integer>1</integer> 51 <integer>1</integer>
67 </map> 52 </map>
68 <key>AllowMultipleViewers</key> 53 <key>AllowMultipleViewers</key>
69 <map> 54 <map>
70 <key>Comment</key> 55 <key>Comment</key>
71 <string>Allow multiple viewers.</string> 56 <string>Allow multiple viewers.</string>
72 <key>Persist</key> 57 <key>Persist</key>
73 <integer>1</integer> 58 <integer>1</integer>
74 <key>Type</key> 59 <key>Type</key>
75 <string>Boolean</string> 60 <string>Boolean</string>
76 <key>Value</key> 61 <key>Value</key>
77 <integer>0</integer> 62 <integer>0</integer>
78 </map> 63 </map>
79 <key>AllowTapTapHoldRun</key> 64 <key>AllowTapTapHoldRun</key>
80 <map> 65 <map>
81 <key>Comment</key> 66 <key>Comment</key>
82 <string>Tapping a direction key twice and holding it down makes avatar run</string> 67 <string>Tapping a direction key twice and holding it down makes avatar run</string>
83 <key>Persist</key> 68 <key>Persist</key>
84 <integer>1</integer> 69 <integer>1</integer>
85 <key>Type</key> 70 <key>Type</key>
86 <string>Boolean</string> 71 <string>Boolean</string>
87 <key>Value</key> 72 <key>Value</key>
88 <integer>1</integer> 73 <integer>1</integer>
89 </map> 74 </map>
90 <key>AnimateTextures</key> 75 <key>AnimateTextures</key>
91 <map> 76 <map>
92 <key>Comment</key> 77 <key>Comment</key>
93 <string>Enable texture animation (debug)</string> 78 <string>Enable texture animation (debug)</string>
94 <key>Persist</key> 79 <key>Persist</key>
95 <integer>1</integer> 80 <integer>1</integer>
96 <key>Type</key> 81 <key>Type</key>
97 <string>Boolean</string> 82 <string>Boolean</string>
98 <key>Value</key> 83 <key>Value</key>
99 <integer>1</integer> 84 <integer>1</integer>
100 </map> 85 </map>
101 <key>AnimationDebug</key> 86 <key>AnimationDebug</key>
102 <map> 87 <map>
103 <key>Comment</key> 88 <key>Comment</key>
104 <string>Show active animations in a bubble above avatars head</string> 89 <string>Show active animations in a bubble above avatars head</string>
105 <key>Persist</key> 90 <key>Persist</key>
106 <integer>1</integer> 91 <integer>1</integer>
107 <key>Type</key> 92 <key>Type</key>
108 <string>Boolean</string> 93 <string>Boolean</string>
109 <key>Value</key> 94 <key>Value</key>
110 <integer>0</integer> 95 <integer>0</integer>
111 </map> 96 </map>
112 <key>AppearanceCameraMovement</key> 97 <key>AppearanceCameraMovement</key>
113 <map> 98 <map>
114 <key>Comment</key> 99 <key>Comment</key>
115 <string>When entering appearance editing mode, camera zooms in on currently selected portion of avatar</string> 100 <string>When entering appearance editing mode, camera zooms in on currently selected portion of avatar</string>
116 <key>Persist</key> 101 <key>Persist</key>
117 <integer>1</integer> 102 <integer>1</integer>
118 <key>Type</key> 103 <key>Type</key>
119 <string>Boolean</string> 104 <string>Boolean</string>
120 <key>Value</key> 105 <key>Value</key>
121 <integer>1</integer> 106 <integer>1</integer>
122 </map> 107 </map>
123 <key>ApplyColorImmediately</key> 108 <key>ApplyColorImmediately</key>
124 <map> 109 <map>
125 <key>Comment</key> 110 <key>Comment</key>
126 <string>Preview selections in color picker immediately</string> 111 <string>Preview selections in color picker immediately</string>
127 <key>Persist</key> 112 <key>Persist</key>
128 <integer>1</integer> 113 <integer>1</integer>
129 <key>Type</key> 114 <key>Type</key>
130 <string>Boolean</string> 115 <string>Boolean</string>
131 <key>Value</key> 116 <key>Value</key>
132 <integer>1</integer> 117 <integer>1</integer>
133 </map> 118 </map>
134 <key>ApplyTextureImmediately</key> 119 <key>ApplyTextureImmediately</key>
135 <map> 120 <map>
136 <key>Comment</key> 121 <key>Comment</key>
137 <string>Preview selections in texture picker immediately</string> 122 <string>Preview selections in texture picker immediately</string>
138 <key>Persist</key> 123 <key>Persist</key>
139 <integer>1</integer> 124 <integer>1</integer>
140 <key>Type</key> 125 <key>Type</key>
141 <string>Boolean</string> 126 <string>Boolean</string>
142 <key>Value</key> 127 <key>Value</key>
143 <integer>1</integer> 128 <integer>1</integer>
144 </map> 129 </map>
145 <key>ArrowKeysMoveAvatar</key> 130 <key>ArrowKeysMoveAvatar</key>
146 <map> 131 <map>
147 <key>Comment</key> 132 <key>Comment</key>
148 <string>While cursor is in chat entry box, arrow keys still control your avatar</string> 133 <string>While cursor is in chat entry box, arrow keys still control your avatar</string>
149 <key>Persist</key> 134 <key>Persist</key>
150 <integer>1</integer> 135 <integer>1</integer>
151 <key>Type</key> 136 <key>Type</key>
152 <string>Boolean</string> 137 <string>Boolean</string>
153 <key>Value</key> 138 <key>Value</key>
154 <integer>1</integer> 139 <integer>1</integer>
155 </map> 140 </map>
156 <key>AskedAboutCrashReports</key> 141 <key>AskedAboutCrashReports</key>
157 <map> 142 <map>
158 <key>Comment</key> 143 <key>Comment</key>
159 <string>Turns off dialog asking if you want to enable crash reporting</string> 144 <string>Turns off dialog asking if you want to enable crash reporting</string>
160 <key>Persist</key> 145 <key>Persist</key>
161 <integer>1</integer> 146 <integer>1</integer>
162 <key>Type</key> 147 <key>Type</key>
163 <string>Boolean</string> 148 <string>Boolean</string>
164 <key>Value</key> 149 <key>Value</key>
165 <integer>0</integer> 150 <integer>0</integer>
166 </map> 151 </map>
167 <key>AsyncKeyboard</key> 152 <key>AsyncKeyboard</key>
168 <map> 153 <map>
169 <key>Comment</key> 154 <key>Comment</key>
170 <string>Improves responsiveness to keyboard input when at low framerates</string> 155 <string>Improves responsiveness to keyboard input when at low framerates</string>
171 <key>Persist</key> 156 <key>Persist</key>
172 <integer>1</integer> 157 <integer>1</integer>
173 <key>Type</key> 158 <key>Type</key>
174 <string>Boolean</string> 159 <string>Boolean</string>
175 <key>Value</key> 160 <key>Value</key>
176 <integer>1</integer> 161 <integer>1</integer>
177 </map> 162 </map>
178 <key>AuctionShowFence</key> 163 <key>AuctionShowFence</key>
179 <map> 164 <map>
180 <key>Comment</key> 165 <key>Comment</key>
181 <string>When auctioning land, include parcel boundary marker in snapshot</string> 166 <string>When auctioning land, include parcel boundary marker in snapshot</string>
182 <key>Persist</key> 167 <key>Persist</key>
183 <integer>1</integer> 168 <integer>1</integer>
184 <key>Type</key> 169 <key>Type</key>
185 <string>Boolean</string> 170 <string>Boolean</string>
186 <key>Value</key> 171 <key>Value</key>
187 <integer>1</integer> 172 <integer>1</integer>
188 </map> 173 </map>
189 <key>AudioLevelAmbient</key> 174 <key>AudioLevelAmbient</key>
190 <map> 175 <map>
191 <key>Comment</key> 176 <key>Comment</key>
192 <string>Audio level of environment sounds</string> 177 <string>Audio level of environment sounds</string>
193 <key>Persist</key> 178 <key>Persist</key>
194 <integer>1</integer> 179 <integer>1</integer>
195 <key>Type</key> 180 <key>Type</key>
196 <string>F32</string> 181 <string>F32</string>
197 <key>Value</key> 182 <key>Value</key>
198 <real>0.5</real> 183 <real>0.5</real>
199 </map> 184 </map>
200 <key>AudioLevelDistance</key> 185 <key>AudioLevelDistance</key>
201 <map> 186 <map>
202 <key>Comment</key> 187 <key>Comment</key>
203 <string>Scale factor for audio engine (multiple of world scale, 2.0 = audio falls off twice as fast)</string> 188 <string>Scale factor for audio engine (multiple of world scale, 2.0 = audio falls off twice as fast)</string>
204 <key>Persist</key> 189 <key>Persist</key>
205 <integer>1</integer> 190 <integer>1</integer>
206 <key>Type</key> 191 <key>Type</key>
207 <string>F32</string> 192 <string>F32</string>
208 <key>Value</key> 193 <key>Value</key>
209 <real>1</real> 194 <real>1.0</real>
210 </map> 195 </map>
211 <key>AudioLevelDoppler</key> 196 <key>AudioLevelDoppler</key>
212 <map> 197 <map>
213 <key>Comment</key> 198 <key>Comment</key>
214 <string>Scale of doppler effect on moving audio sources (1.0 = normal, &lt;1.0 = diminished doppler effect, &gt;1.0 = enhanced doppler effect)</string> 199 <string>Scale of doppler effect on moving audio sources (1.0 = normal, &lt;1.0 = diminished doppler effect, &gt;1.0 = enhanced doppler effect)</string>
215 <key>Persist</key> 200 <key>Persist</key>
216 <integer>1</integer> 201 <integer>1</integer>
217 <key>Type</key> 202 <key>Type</key>
218 <string>F32</string> 203 <string>F32</string>
219 <key>Value</key> 204 <key>Value</key>
220 <real>1</real> 205 <real>1.0</real>
221 </map> 206 </map>
222 <key>AudioLevelMaster</key> 207 <key>AudioLevelMaster</key>
223 <map> 208 <map>
224 <key>Comment</key> 209 <key>Comment</key>
225 <string>Master audio level, or overall volume</string> 210 <string>Master audio level, or overall volume</string>
226 <key>Persist</key> 211 <key>Persist</key>
227 <integer>1</integer> 212 <integer>1</integer>
228 <key>Type</key> 213 <key>Type</key>
229 <string>F32</string> 214 <string>F32</string>
230 <key>Value</key> 215 <key>Value</key>
231 <real>1</real> 216 <real>1.0</real>
232 </map> 217 </map>
233 <key>AudioLevelMedia</key> 218 <key>AudioLevelMedia</key>
234 <map> 219 <map>
235 <key>Comment</key> 220 <key>Comment</key>
236 <string>Audio level of Quicktime movies</string> 221 <string>Audio level of Quicktime movies</string>
237 <key>Persist</key> 222 <key>Persist</key>
238 <integer>1</integer> 223 <integer>1</integer>
239 <key>Type</key> 224 <key>Type</key>
240 <string>F32</string> 225 <string>F32</string>
241 <key>Value</key> 226 <key>Value</key>
242 <real>1</real> 227 <real>1.0</real>
243 </map> 228 </map>
244 <key>AudioLevelMic</key> 229 <key>AudioLevelMic</key>
245 <map> 230 <map>
246 <key>Comment</key> 231 <key>Comment</key>
247 <string>Audio level of microphone input</string> 232 <string>Audio level of microphone input</string>
248 <key>Persist</key> 233 <key>Persist</key>
249 <integer>1</integer> 234 <integer>1</integer>
250 <key>Type</key> 235 <key>Type</key>
251 <string>F32</string> 236 <string>F32</string>
252 <key>Value</key> 237 <key>Value</key>
253 <real>1</real> 238 <real>1.0</real>
254 </map> 239 </map>
255 <key>AudioLevelMusic</key> 240 <key>AudioLevelMusic</key>
256 <map> 241 <map>
257 <key>Comment</key> 242 <key>Comment</key>
258 <string>Audio level of streaming music</string> 243 <string>Audio level of streaming music</string>
259 <key>Persist</key> 244 <key>Persist</key>
260 <integer>1</integer> 245 <integer>1</integer>
261 <key>Type</key> 246 <key>Type</key>
262 <string>F32</string> 247 <string>F32</string>
263 <key>Value</key> 248 <key>Value</key>
264 <real>1</real> 249 <real>1.0</real>
265 </map> 250 </map>
266 <key>AudioLevelRolloff</key> 251 <key>AudioLevelRolloff</key>
267 <map> 252 <map>
268 <key>Comment</key> 253 <key>Comment</key>
269 <string>Controls the distance-based dropoff of audio volume (fraction or multiple of default audio rolloff)</string> 254 <string>Controls the distance-based dropoff of audio volume (fraction or multiple of default audio rolloff)</string>
270 <key>Persist</key> 255 <key>Persist</key>
271 <integer>1</integer> 256 <integer>1</integer>
272 <key>Type</key> 257 <key>Type</key>
273 <string>F32</string> 258 <string>F32</string>
274 <key>Value</key> 259 <key>Value</key>
275 <real>1</real> 260 <real>1.0</real>
276 </map> 261 </map>
277 <key>AudioLevelSFX</key> 262 <key>AudioLevelSFX</key>
278 <map> 263 <map>
279 <key>Comment</key> 264 <key>Comment</key>
280 <string>Audio level of in-world sound effects</string> 265 <string>Audio level of in-world sound effects</string>
281 <key>Persist</key> 266 <key>Persist</key>
282 <integer>1</integer> 267 <integer>1</integer>
283 <key>Type</key> 268 <key>Type</key>
284 <string>F32</string> 269 <string>F32</string>
285 <key>Value</key> 270 <key>Value</key>
286 <real>1</real> 271 <real>1.0</real>
287 </map> 272 </map>
288 <key>AudioLevelUI</key> 273 <key>AudioLevelUI</key>
289 <map> 274 <map>
290 <key>Comment</key> 275 <key>Comment</key>
291 <string>Audio level of UI sound effects</string> 276 <string>Audio level of UI sound effects</string>
292 <key>Persist</key> 277 <key>Persist</key>
293 <integer>1</integer> 278 <integer>1</integer>
294 <key>Type</key> 279 <key>Type</key>
295 <string>F32</string> 280 <string>F32</string>
296 <key>Value</key> 281 <key>Value</key>
297 <real>0.5</real> 282 <real>0.5</real>
298 </map> 283 </map>
299 <key>AudioLevelVoice</key> 284 <key>AudioLevelVoice</key>
300 <map> 285 <map>
301 <key>Comment</key> 286 <key>Comment</key>
302 <string>Audio level of voice chat</string> 287 <string>Audio level of voice chat</string>
303 <key>Persist</key> 288 <key>Persist</key>
304 <integer>1</integer> 289 <integer>1</integer>
305 <key>Type</key> 290 <key>Type</key>
306 <string>F32</string> 291 <string>F32</string>
307 <key>Value</key> 292 <key>Value</key>
308 <real>0.5</real> 293 <real>0.5</real>
309 </map> 294 </map>
310 <key>AudioStreamingMusic</key> 295 <key>AudioStreamingMusic</key>
311 <map> 296 <map>
312 <key>Comment</key> 297 <key>Comment</key>
313 <string>Enable streaming audio</string> 298 <string>Enable streaming audio</string>
314 <key>Persist</key> 299 <key>Persist</key>
315 <integer>1</integer> 300 <integer>1</integer>
316 <key>Type</key> 301 <key>Type</key>
317 <string>Boolean</string> 302 <string>Boolean</string>
318 <key>Value</key> 303 <key>Value</key>
319 <integer>0</integer> 304 <integer>0</integer>
320 </map> 305 </map>
321 <key>AudioStreamingVideo</key> 306 <key>AudioStreamingVideo</key>
322 <map> 307 <map>
323 <key>Comment</key> 308 <key>Comment</key>
324 <string>Enable streaming video</string> 309 <string>Enable streaming video</string>
325 <key>Persist</key> 310 <key>Persist</key>
326 <integer>1</integer> 311 <integer>1</integer>
327 <key>Type</key> 312 <key>Type</key>
328 <string>Boolean</string> 313 <string>Boolean</string>
329 <key>Value</key> 314 <key>Value</key>
330 <integer>0</integer> 315 <integer>0</integer>
331 </map> 316 </map>
332 <key>AutoAcceptNewInventory</key> 317 <key>AutoAcceptNewInventory</key>
333 <map> 318 <map>
334 <key>Comment</key> 319 <key>Comment</key>
335 <string>Automatically accept new notecards/textures/landmarks</string> 320 <string>Automatically accept new notecards/textures/landmarks</string>
336 <key>Persist</key> 321 <key>Persist</key>
337 <integer>1</integer> 322 <integer>1</integer>
338 <key>Type</key> 323 <key>Type</key>
339 <string>Boolean</string> 324 <string>Boolean</string>
340 <key>Value</key> 325 <key>Value</key>
341 <integer>0</integer> 326 <integer>0</integer>
342 </map> 327 </map>
328 <key>AutoLeveling</key>
329 <map>
330 <key>Comment</key>
331 <string>Keep Flycam level.</string>
332 <key>Persist</key>
333 <integer>1</integer>
334 <key>Type</key>
335 <string>Boolean</string>
336 <key>Value</key>
337 <integer>1</integer>
338 </map>
343 <key>AutoLoadWebProfiles</key> 339 <key>AutoLoadWebProfiles</key>
344 <map> 340 <map>
345 <key>Comment</key> 341 <key>Comment</key>
346 <string>Automatically load ALL profile webpages without asking first.</string> 342 <string>Automatically load ALL profile webpages without asking first.</string>
347 <key>Persist</key> 343 <key>Persist</key>
348 <integer>1</integer> 344 <integer>1</integer>
349 <key>Type</key> 345 <key>Type</key>
350 <string>Boolean</string> 346 <string>Boolean</string>
351 <key>Value</key> 347 <key>Value</key>
352 <integer>0</integer> 348 <integer>0</integer>
353 </map> 349 </map>
354 <key>AutoLogin</key> 350 <key>AutoLogin</key>
355 <map> 351 <map>
356 <key>Comment</key> 352 <key>Comment</key>
357 <string>Login automatically using last username/password combination</string> 353 <string>Login automatically using last username/password combination</string>
358 <key>Persist</key> 354 <key>Persist</key>
359 <integer>1</integer> 355 <integer>0</integer>
360 <key>Type</key> 356 <key>Type</key>
361 <string>Boolean</string> 357 <string>Boolean</string>
362 <key>Value</key> 358 <key>Value</key>
363 <integer>0</integer> 359 <integer>0</integer>
364 </map> 360 </map>
365 <key>AutoMimeDiscovery</key> 361 <key>AutoMimeDiscovery</key>
366 <map> 362 <map>
367 <key>Comment</key> 363 <key>Comment</key>
368 <string>Enable viewer mime type discovery of media URLs</string> 364 <string>Enable viewer mime type discovery of media URLs</string>
369 <key>Persist</key> 365 <key>Persist</key>
370 <integer>1</integer> 366 <integer>1</integer>
371 <key>Type</key> 367 <key>Type</key>
372 <string>Boolean</string> 368 <string>Boolean</string>
373 <key>Value</key> 369 <key>Value</key>
374 <integer>0</integer> 370 <integer>0</integer>
375 </map> 371 </map>
376 <key>AutoPilotLocksCamera</key> 372 <key>AutoPilotLocksCamera</key>
377 <map> 373 <map>
378 <key>Comment</key> 374 <key>Comment</key>
379 <string>Keep camera position locked when avatar walks to selected position</string> 375 <string>Keep camera position locked when avatar walks to selected position</string>
380 <key>Persist</key> 376 <key>Persist</key>
381 <integer>1</integer> 377 <integer>1</integer>
382 <key>Type</key> 378 <key>Type</key>
383 <string>Boolean</string> 379 <string>Boolean</string>
384 <key>Value</key> 380 <key>Value</key>
385 <integer>0</integer> 381 <integer>0</integer>
386 </map> 382 </map>
387 <key>AutoSnapshot</key> 383 <key>AutoSnapshot</key>
388 <map> 384 <map>
389 <key>Comment</key> 385 <key>Comment</key>
390 <string>Update snapshot when camera stops moving, or any parameter changes</string> 386 <string>Update snapshot when camera stops moving, or any parameter changes</string>
391 <key>Persist</key> 387 <key>Persist</key>
392 <integer>1</integer> 388 <integer>1</integer>
393 <key>Type</key> 389 <key>Type</key>
394 <string>Boolean</string> 390 <string>Boolean</string>
395 <key>Value</key> 391 <key>Value</key>
396 <integer>0</integer> 392 <integer>0</integer>
397 </map> 393 </map>
398 <key>AutomaticFly</key> 394 <key>AutomaticFly</key>
399 <map> 395 <map>
400 <key>Comment</key> 396 <key>Comment</key>
401 <string>Fly by holding jump key or using &quot;Fly&quot; command (FALSE = fly by using &quot;Fly&quot; command only)</string> 397 <string>Fly by holding jump key or using "Fly" command (FALSE = fly by using "Fly" command only)</string>
402 <key>Persist</key> 398 <key>Persist</key>
403 <integer>1</integer> 399 <integer>1</integer>
404 <key>Type</key> 400 <key>Type</key>
405 <string>Boolean</string> 401 <string>Boolean</string>
406 <key>Value</key> 402 <key>Value</key>
407 <integer>1</integer> 403 <integer>1</integer>
408 </map> 404 </map>
405 <key>AvatarAxisDeadZone0</key>
406 <map>
407 <key>Comment</key>
408 <string>Avatar axis 0 dead zone.</string>
409 <key>Persist</key>
410 <integer>1</integer>
411 <key>Type</key>
412 <string>F32</string>
413 <key>Value</key>
414 <real>0.1</real>
415 </map>
416 <key>AvatarAxisDeadZone1</key>
417 <map>
418 <key>Comment</key>
419 <string>Avatar axis 1 dead zone.</string>
420 <key>Persist</key>
421 <integer>1</integer>
422 <key>Type</key>
423 <string>F32</string>
424 <key>Value</key>
425 <real>0.1</real>
426 </map>
427 <key>AvatarAxisDeadZone2</key>
428 <map>
429 <key>Comment</key>
430 <string>Avatar axis 2 dead zone.</string>
431 <key>Persist</key>
432 <integer>1</integer>
433 <key>Type</key>
434 <string>F32</string>
435 <key>Value</key>
436 <real>0.1</real>
437 </map>
438 <key>AvatarAxisDeadZone3</key>
439 <map>
440 <key>Comment</key>
441 <string>Avatar axis 3 dead zone.</string>
442 <key>Persist</key>
443 <integer>1</integer>
444 <key>Type</key>
445 <string>F32</string>
446 <key>Value</key>
447 <real>0.1</real>
448 </map>
449 <key>AvatarAxisDeadZone4</key>
450 <map>
451 <key>Comment</key>
452 <string>Avatar axis 4 dead zone.</string>
453 <key>Persist</key>
454 <integer>1</integer>
455 <key>Type</key>
456 <string>F32</string>
457 <key>Value</key>
458 <real>0.1</real>
459 </map>
460 <key>AvatarAxisDeadZone5</key>
461 <map>
462 <key>Comment</key>
463 <string>Avatar axis 5 dead zone.</string>
464 <key>Persist</key>
465 <integer>1</integer>
466 <key>Type</key>
467 <string>F32</string>
468 <key>Value</key>
469 <real>0.1</real>
470 </map>
471 <key>AvatarAxisScale0</key>
472 <map>
473 <key>Comment</key>
474 <string>Avatar axis 0 scaler.</string>
475 <key>Persist</key>
476 <integer>1</integer>
477 <key>Type</key>
478 <string>F32</string>
479 <key>Value</key>
480 <real>1.0</real>
481 </map>
482 <key>AvatarAxisScale1</key>
483 <map>
484 <key>Comment</key>
485 <string>Avatar axis 1 scaler.</string>
486 <key>Persist</key>
487 <integer>1</integer>
488 <key>Type</key>
489 <string>F32</string>
490 <key>Value</key>
491 <real>1.0</real>
492 </map>
493 <key>AvatarAxisScale2</key>
494 <map>
495 <key>Comment</key>
496 <string>Avatar axis 2 scaler.</string>
497 <key>Persist</key>
498 <integer>1</integer>
499 <key>Type</key>
500 <string>F32</string>
501 <key>Value</key>
502 <real>1.0</real>
503 </map>
504 <key>AvatarAxisScale3</key>
505 <map>
506 <key>Comment</key>
507 <string>Avatar axis 3 scaler.</string>
508 <key>Persist</key>
509 <integer>1</integer>
510 <key>Type</key>
511 <string>F32</string>
512 <key>Value</key>
513 <real>1.0</real>
514 </map>
515 <key>AvatarAxisScale4</key>
516 <map>
517 <key>Comment</key>
518 <string>Avatar axis 4 scaler.</string>
519 <key>Persist</key>
520 <integer>1</integer>
521 <key>Type</key>
522 <string>F32</string>
523 <key>Value</key>
524 <real>1.0</real>
525 </map>
526 <key>AvatarAxisScale5</key>
527 <map>
528 <key>Comment</key>
529 <string>Avatar axis 5 scaler.</string>
530 <key>Persist</key>
531 <integer>1</integer>
532 <key>Type</key>
533 <string>F32</string>
534 <key>Value</key>
535 <real>1.0</real>
536 </map>
409 <key>AvatarBacklight</key> 537 <key>AvatarBacklight</key>
410 <map> 538 <map>
411 <key>Comment</key> 539 <key>Comment</key>
412 <string>Add rim lighting to avatar rendering to approximate shininess of skin</string> 540 <string>Add rim lighting to avatar rendering to approximate shininess of skin</string>
413 <key>Persist</key> 541 <key>Persist</key>
414 <integer>1</integer> 542 <integer>1</integer>
415 <key>Type</key> 543 <key>Type</key>
416 <string>Boolean</string> 544 <string>Boolean</string>
417 <key>Value</key> 545 <key>Value</key>
418 <integer>1</integer> 546 <integer>1</integer>
419 </map> 547 </map>
420 <key>AvatarCompositeLimit</key> 548 <key>AvatarCompositeLimit</key>
421 <map> 549 <map>
422 <key>Comment</key> 550 <key>Comment</key>
423 <string>Maximum number of avatars to display appearance changes on the fly</string> 551 <string>Maximum number of avatars to display appearance changes on the fly</string>
424 <key>Persist</key> 552 <key>Persist</key>
425 <integer>1</integer> 553 <integer>1</integer>
426 <key>Type</key> 554 <key>Type</key>
427 <string>S32</string> 555 <string>S32</string>
428 <key>Value</key> 556 <key>Value</key>
429 <integer>5</integer> 557 <integer>5</integer>
430 </map> 558 </map>
559 <key>AvatarFeathering</key>
560 <map>
561 <key>Comment</key>
562 <string>Avatar feathering (less is softer)</string>
563 <key>Persist</key>
564 <integer>1</integer>
565 <key>Type</key>
566 <string>F32</string>
567 <key>Value</key>
568 <real>16.0</real>
569 </map>
431 <key>AvatarPickerSortOrder</key> 570 <key>AvatarPickerSortOrder</key>
432 <map> 571 <map>
433 <key>Comment</key> 572 <key>Comment</key>
434 <string>Specifies sort key for textures in avatar picker (+0 = name, +1 = date, +2 = folders always by name, +4 = system folders to top)</string> 573 <string>Specifies sort key for textures in avatar picker (+0 = name, +1 = date, +2 = folders always by name, +4 = system folders to top)</string>
435 <key>Persist</key> 574 <key>Persist</key>
436 <integer>1</integer> 575 <integer>1</integer>
437 <key>Type</key> 576 <key>Type</key>
438 <string>U32</string> 577 <string>U32</string>
439 <key>Value</key> 578 <key>Value</key>
440 <integer>2</integer> 579 <integer>2</integer>
441 </map> 580 </map>
442 <key>AvatarSex</key> 581 <key>AvatarSex</key>
443 <map> 582 <map>
444 <key>Comment</key> 583 <key>Comment</key>
445 <string /> 584 <string />
446 <key>Persist</key> 585 <key>Persist</key>
447 <integer>0</integer> 586 <integer>0</integer>
448 <key>Type</key> 587 <key>Type</key>
449 <string>U32</string> 588 <string>U32</string>
450 <key>Value</key> 589 <key>Value</key>
451 <integer>0</integer> 590 <integer>0</integer>
452 </map> 591 </map>
453 <key>BackgroundChatColor</key> 592 <key>BackgroundChatColor</key>
454 <map> 593 <map>
455 <key>Comment</key> 594 <key>Comment</key>
456 <string>Color of chat bubble background</string> 595 <string>Color of chat bubble background</string>
457 <key>Persist</key> 596 <key>Persist</key>
458 <integer>1</integer> 597 <integer>1</integer>
459 <key>Type</key> 598 <key>Type</key>
460 <string>Color4</string> 599 <string>Color4</string>
461 <key>Value</key> 600 <key>Value</key>
462 <array> 601 <array>
463 <real>0</real> 602 <real>0.0</real>
464 <real>0</real> 603 <real>0.0</real>
465 <real>0</real> 604 <real>0.0</real>
466 <real>1</real> 605 <real>1.0</real>
467 </array> 606 </array>
468 </map> 607 </map>
469 <key>BackgroundYieldTime</key> 608 <key>BackgroundYieldTime</key>
470 <map> 609 <map>
471 <key>Comment</key> 610 <key>Comment</key>
472 <string>Amount of time to yield every frame to other applications when SL is not the foreground window (milliseconds)</string> 611 <string>Amount of time to yield every frame to other applications when SL is not the foreground window (milliseconds)</string>
473 <key>Persist</key> 612 <key>Persist</key>
474 <integer>1</integer> 613 <integer>1</integer>
475 <key>Type</key> 614 <key>Type</key>
476 <string>S32</string> 615 <string>S32</string>
477 <key>Value</key> 616 <key>Value</key>
478 <integer>40</integer> 617 <integer>40</integer>
479 </map> 618 </map>
480 <key>BackwardBtnRect</key> 619 <key>BackwardBtnRect</key>
481 <map> 620 <map>
482 <key>Comment</key> 621 <key>Comment</key>
483 <string /> 622 <string />
484 <key>Persist</key> 623 <key>Persist</key>
485 <integer>0</integer> 624 <integer>0</integer>
486 <key>Type</key> 625 <key>Type</key>
487 <string>Rect</string> 626 <string>Rect</string>
488 <key>Value</key> 627 <key>Value</key>
489 <array> 628 <array>
490 <integer>45</integer> 629 <integer>45</integer>
491 <integer>29</integer> 630 <integer>29</integer>
492 <integer>66</integer> 631 <integer>66</integer>
493 <integer>4</integer> 632 <integer>4</integer>
494 </array> 633 </array>
495 </map> 634 </map>
496 <key>BasicHelpRect</key> 635 <key>BasicHelpRect</key>
497 <map> 636 <map>
498 <key>Comment</key> 637 <key>Comment</key>
499 <string>Rectangle for help window</string> 638 <string>Rectangle for help window</string>
500 <key>Persist</key> 639 <key>Persist</key>
501 <integer>1</integer> 640 <integer>1</integer>
502 <key>Type</key> 641 <key>Type</key>
503 <string>Rect</string> 642 <string>Rect</string>
504 <key>Value</key> 643 <key>Value</key>
505 <array> 644 <array>
506 <integer>0</integer> 645 <integer>0</integer>
507 <integer>404</integer> 646 <integer>404</integer>
508 <integer>467</integer> 647 <integer>467</integer>
509 <integer>0</integer> 648 <integer>0</integer>
510 </array> 649 </array>
511 </map> 650 </map>
512 <key>BeaconAlwaysOn</key> 651 <key>BeaconAlwaysOn</key>
513 <map> 652 <map>
514 <key>Comment</key> 653 <key>Comment</key>
515 <string>Beacons / highlighting always on</string> 654 <string>Beacons / highlighting always on</string>
516 <key>Persist</key> 655 <key>Persist</key>
517 <integer>1</integer> 656 <integer>1</integer>
518 <key>Type</key> 657 <key>Type</key>
519 <string>Boolean</string> 658 <string>Boolean</string>
520 <key>Value</key> 659 <key>Value</key>
521 <integer>0</integer> 660 <integer>0</integer>
522 </map> 661 </map>
523 <key>BrowserHomePage</key> 662 <key>BrowserHomePage</key>
524 <map> 663 <map>
525 <key>Comment</key> 664 <key>Comment</key>
526 <string>[NOT USED]</string> 665 <string>[NOT USED]</string>
527 <key>Persist</key> 666 <key>Persist</key>
528 <integer>1</integer> 667 <integer>1</integer>
529 <key>Type</key> 668 <key>Type</key>
530 <string>String</string> 669 <string>String</string>
531 <key>Value</key> 670 <key>Value</key>
532 <string>http://www.secondlife.com</string> 671 <string>http://www.secondlife.com</string>
533 </map> 672 </map>
534 <key>BrowserProxyAddress</key> 673 <key>BrowserProxyAddress</key>
535 <map> 674 <map>
536 <key>Comment</key> 675 <key>Comment</key>
537 <string>Address for the Web Proxy]</string> 676 <string>Address for the Web Proxy]</string>
538 <key>Persist</key> 677 <key>Persist</key>
539 <integer>1</integer> 678 <integer>1</integer>
540 <key>Type</key> 679 <key>Type</key>
541 <string>String</string> 680 <string>String</string>
542 <key>Value</key> 681 <key>Value</key>
543 <string /> 682 <string />
544 </map> 683 </map>
545 <key>BrowserProxyEnabled</key> 684 <key>BrowserProxyEnabled</key>
546 <map> 685 <map>
547 <key>Comment</key> 686 <key>Comment</key>
548 <string>Use Web Proxy</string> 687 <string>Use Web Proxy</string>
549 <key>Persist</key> 688 <key>Persist</key>
550 <integer>1</integer> 689 <integer>1</integer>
551 <key>Type</key> 690 <key>Type</key>
552 <string>Boolean</string> 691 <string>Boolean</string>
553 <key>Value</key> 692 <key>Value</key>
554 <integer>0</integer> 693 <integer>0</integer>
555 </map> 694 </map>
556 <key>BrowserProxyExclusions</key> 695 <key>BrowserProxyExclusions</key>
557 <map> 696 <map>
558 <key>Comment</key> 697 <key>Comment</key>
559 <string>[NOT USED]</string> 698 <string>[NOT USED]</string>
560 <key>Persist</key> 699 <key>Persist</key>
561 <integer>1</integer> 700 <integer>1</integer>
562 <key>Type</key> 701 <key>Type</key>
563 <string>String</string> 702 <string>String</string>
564 <key>Value</key> 703 <key>Value</key>
565 <string /> 704 <string />
566 </map> 705 </map>
567 <key>BrowserProxyPort</key> 706 <key>BrowserProxyPort</key>
568 <map> 707 <map>
569 <key>Comment</key> 708 <key>Comment</key>
570 <string>Port for Web Proxy</string> 709 <string>Port for Web Proxy</string>
571 <key>Persist</key> 710 <key>Persist</key>
572 <integer>1</integer> 711 <integer>1</integer>
573 <key>Type</key> 712 <key>Type</key>
574 <string>S32</string> 713 <string>S32</string>
575 <key>Value</key> 714 <key>Value</key>
576 <integer>3128</integer> 715 <integer>3128</integer>
577 </map> 716 </map>
578 <key>BrowserProxySocks45</key> 717 <key>BrowserProxySocks45</key>
579 <map> 718 <map>
580 <key>Comment</key> 719 <key>Comment</key>
581 <string>[NOT USED]</string> 720 <string>[NOT USED]</string>
582 <key>Persist</key> 721 <key>Persist</key>
583 <integer>1</integer> 722 <integer>1</integer>
584 <key>Type</key> 723 <key>Type</key>
585 <string>S32</string> 724 <string>S32</string>
586 <key>Value</key> 725 <key>Value</key>
587 <integer>5</integer> 726 <integer>5</integer>
588 </map> 727 </map>
728 <key>BuildAxisDeadZone0</key>
729 <map>
730 <key>Comment</key>
731 <string>Build axis 0 dead zone.</string>
732 <key>Persist</key>
733 <integer>1</integer>
734 <key>Type</key>
735 <string>F32</string>
736 <key>Value</key>
737 <real>0.1</real>
738 </map>
739 <key>BuildAxisDeadZone1</key>
740 <map>
741 <key>Comment</key>
742 <string>Build axis 1 dead zone.</string>
743 <key>Persist</key>
744 <integer>1</integer>
745 <key>Type</key>
746 <string>F32</string>
747 <key>Value</key>
748 <real>0.1</real>
749 </map>
750 <key>BuildAxisDeadZone2</key>
751 <map>
752 <key>Comment</key>
753 <string>Build axis 2 dead zone.</string>
754 <key>Persist</key>
755 <integer>1</integer>
756 <key>Type</key>
757 <string>F32</string>
758 <key>Value</key>
759 <real>0.1</real>
760 </map>
761 <key>BuildAxisDeadZone3</key>
762 <map>
763 <key>Comment</key>
764 <string>Build axis 3 dead zone.</string>
765 <key>Persist</key>
766 <integer>1</integer>
767 <key>Type</key>
768 <string>F32</string>
769 <key>Value</key>
770 <real>0.1</real>
771 </map>
772 <key>BuildAxisDeadZone4</key>
773 <map>
774 <key>Comment</key>
775 <string>Build axis 4 dead zone.</string>
776 <key>Persist</key>
777 <integer>1</integer>
778 <key>Type</key>
779 <string>F32</string>
780 <key>Value</key>
781 <real>0.1</real>
782 </map>
783 <key>BuildAxisDeadZone5</key>
784 <map>
785 <key>Comment</key>
786 <string>Build axis 5 dead zone.</string>
787 <key>Persist</key>
788 <integer>1</integer>
789 <key>Type</key>
790 <string>F32</string>
791 <key>Value</key>
792 <real>0.1</real>
793 </map>
794 <key>BuildAxisScale0</key>
795 <map>
796 <key>Comment</key>
797 <string>Build axis 0 scaler.</string>
798 <key>Persist</key>
799 <integer>1</integer>
800 <key>Type</key>
801 <string>F32</string>
802 <key>Value</key>
803 <real>1.0</real>
804 </map>
805 <key>BuildAxisScale1</key>
806 <map>
807 <key>Comment</key>
808 <string>Build axis 1 scaler.</string>
809 <key>Persist</key>
810 <integer>1</integer>
811 <key>Type</key>
812 <string>F32</string>
813 <key>Value</key>
814 <real>1.0</real>
815 </map>
816 <key>BuildAxisScale2</key>
817 <map>
818 <key>Comment</key>
819 <string>Build axis 2 scaler.</string>
820 <key>Persist</key>
821 <integer>1</integer>
822 <key>Type</key>
823 <string>F32</string>
824 <key>Value</key>
825 <real>1.0</real>
826 </map>
827 <key>BuildAxisScale3</key>
828 <map>
829 <key>Comment</key>
830 <string>Build axis 3 scaler.</string>
831 <key>Persist</key>
832 <integer>1</integer>
833 <key>Type</key>
834 <string>F32</string>
835 <key>Value</key>
836 <real>1.0</real>
837 </map>
838 <key>BuildAxisScale4</key>
839 <map>
840 <key>Comment</key>
841 <string>Build axis 4 scaler.</string>
842 <key>Persist</key>
843 <integer>1</integer>
844 <key>Type</key>
845 <string>F32</string>
846 <key>Value</key>
847 <real>1.0</real>
848 </map>
849 <key>BuildAxisScale5</key>
850 <map>
851 <key>Comment</key>
852 <string>Build axis 5 scaler.</string>
853 <key>Persist</key>
854 <integer>1</integer>
855 <key>Type</key>
856 <string>F32</string>
857 <key>Value</key>
858 <real>1.0</real>
859 </map>
589 <key>BuildBtnState</key> 860 <key>BuildBtnState</key>
590 <map> 861 <map>
591 <key>Comment</key> 862 <key>Comment</key>
592 <string /> 863 <string />
593 <key>Persist</key> 864 <key>Persist</key>
594 <integer>0</integer> 865 <integer>0</integer>
595 <key>Type</key> 866 <key>Type</key>
596 <string>Boolean</string> 867 <string>Boolean</string>
597 <key>Value</key> 868 <key>Value</key>
598 <integer>0</integer> 869 <integer>0</integer>
599 </map> 870 </map>
871 <key>BuildFeathering</key>
872 <map>
873 <key>Comment</key>
874 <string>Build feathering (less is softer)</string>
875 <key>Persist</key>
876 <integer>1</integer>
877 <key>Type</key>
878 <string>F32</string>
879 <key>Value</key>
880 <real>16.0</real>
881 </map>
600 <key>ButtonFlashCount</key> 882 <key>ButtonFlashCount</key>
601 <map> 883 <map>
602 <key>Comment</key> 884 <key>Comment</key>
603 <string>Number of flashes after which flashing buttons stay lit up</string> 885 <string>Number of flashes after which flashing buttons stay lit up</string>
604 <key>Persist</key> 886 <key>Persist</key>
605 <integer>1</integer> 887 <integer>1</integer>
606 <key>Type</key> 888 <key>Type</key>
607 <string>S32</string> 889 <string>S32</string>
608 <key>Value</key> 890 <key>Value</key>
609 <integer>3</integer> 891 <integer>3</integer>
610 </map> 892 </map>
611 <key>ButtonFlashRate</key> 893 <key>ButtonFlashRate</key>
612 <map> 894 <map>
613 <key>Comment</key> 895 <key>Comment</key>
614 <string>Frequency at which buttons flash (hz)</string> 896 <string>Frequency at which buttons flash (hz)</string>
615 <key>Persist</key> 897 <key>Persist</key>
616 <integer>1</integer> 898 <integer>1</integer>
617 <key>Type</key> 899 <key>Type</key>
618 <string>F32</string> 900 <string>F32</string>
619 <key>Value</key> 901 <key>Value</key>
620 <real>2</real> 902 <real>2.0</real>
621 </map> 903 </map>
622 <key>ButtonHPad</key> 904 <key>ButtonHPad</key>
623 <map> 905 <map>
624 <key>Comment</key> 906 <key>Comment</key>
625 <string>Default horizontal spacing between buttons (pixels)</string> 907 <string>Default horizontal spacing between buttons (pixels)</string>
626 <key>Persist</key> 908 <key>Persist</key>
627 <integer>1</integer> 909 <integer>1</integer>
628 <key>Type</key> 910 <key>Type</key>
629 <string>S32</string> 911 <string>S32</string>
630 <key>Value</key> 912 <key>Value</key>
631 <integer>10</integer> 913 <integer>10</integer>
632 </map> 914 </map>
633 <key>ButtonHeight</key> 915 <key>ButtonHeight</key>
634 <map> 916 <map>
635 <key>Comment</key> 917 <key>Comment</key>
636 <string>Default height for normal buttons (pixels)</string> 918 <string>Default height for normal buttons (pixels)</string>
637 <key>Persist</key> 919 <key>Persist</key>
638 <integer>1</integer> 920 <integer>1</integer>
639 <key>Type</key> 921 <key>Type</key>
640 <string>S32</string> 922 <string>S32</string>
641 <key>Value</key> 923 <key>Value</key>
642 <integer>20</integer> 924 <integer>20</integer>
643 </map> 925 </map>
644 <key>ButtonHeightSmall</key> 926 <key>ButtonHeightSmall</key>
645 <map> 927 <map>
646 <key>Comment</key> 928 <key>Comment</key>
647 <string>Default height for small buttons (pixels)</string> 929 <string>Default height for small buttons (pixels)</string>
648 <key>Persist</key> 930 <key>Persist</key>
649 <integer>1</integer> 931 <integer>1</integer>
650 <key>Type</key> 932 <key>Type</key>
651 <string>S32</string> 933 <string>S32</string>
652 <key>Value</key> 934 <key>Value</key>
653 <integer>16</integer> 935 <integer>16</integer>
654 </map> 936 </map>
655 <key>ButtonVPad</key> 937 <key>ButtonVPad</key>
656 <map> 938 <map>
657 <key>Comment</key> 939 <key>Comment</key>
658 <string>Default vertical spacing between buttons (pixels)</string> 940 <string>Default vertical spacing between buttons (pixels)</string>
659 <key>Persist</key> 941 <key>Persist</key>
660 <integer>1</integer> 942 <integer>1</integer>
661 <key>Type</key> 943 <key>Type</key>
662 <string>S32</string> 944 <string>S32</string>
663 <key>Value</key> 945 <key>Value</key>
664 <integer>1</integer> 946 <integer>1</integer>
665 </map> 947 </map>
666 <key>CacheLocation</key> 948 <key>CacheLocation</key>
667 <map> 949 <map>
668 <key>Comment</key> 950 <key>Comment</key>
669 <string>Controls the location of the local disk cache</string> 951 <string>Controls the location of the local disk cache</string>
670 <key>Persist</key> 952 <key>Persist</key>
671 <integer>1</integer> 953 <integer>1</integer>
672 <key>Type</key> 954 <key>Type</key>
673 <string>String</string> 955 <string>String</string>
674 <key>Value</key> 956 <key>Value</key>
675 <string /> 957 <string />
676 </map> 958 </map>
677 <key>CacheSize</key> 959 <key>CacheSize</key>
678 <map> 960 <map>
679 <key>Comment</key> 961 <key>Comment</key>
680 <string>Controls amount of hard drive space reserved for local file caching in MB</string> 962 <string>Controls amount of hard drive space reserved for local file caching in MB</string>
681 <key>Persist</key> 963 <key>Persist</key>
682 <integer>1</integer> 964 <integer>1</integer>
683 <key>Type</key> 965 <key>Type</key>
684 <string>U32</string> 966 <string>U32</string>
685 <key>Value</key> 967 <key>Value</key>
686 <integer>500</integer> 968 <integer>500</integer>
687 </map> 969 </map>
688 <key>CacheValidateCounter</key> 970 <key>CacheValidateCounter</key>
689 <map> 971 <map>
690 <key>Comment</key> 972 <key>Comment</key>
691 <string>Used to distribute cache validation</string> 973 <string>Used to distribute cache validation</string>
692 <key>Persist</key> 974 <key>Persist</key>
693 <integer>1</integer> 975 <integer>1</integer>
694 <key>Type</key> 976 <key>Type</key>
695 <string>U32</string> 977 <string>U32</string>
696 <key>Value</key> 978 <key>Value</key>
697 <integer>0</integer> 979 <integer>0</integer>
698 </map> 980 </map>
981 <key>CameraMouseWheelZoom</key>
982 <map>
983 <key>Comment</key>
984 <string>Camera zooms in and out with mousewheel</string>
985 <key>Persist</key>
986 <integer>1</integer>
987 <key>Type</key>
988 <string>Boolean</string>
989 <key>Value</key>
990 <integer>1</integer>
991 </map>
699 <key>CameraOffset</key> 992 <key>CameraOffset</key>
700 <map> 993 <map>
701 <key>Comment</key> 994 <key>Comment</key>
702 <string>Render with camera offset from view frustum (rendering debug)</string> 995 <string>Render with camera offset from view frustum (rendering debug)</string>
703 <key>Persist</key> 996 <key>Persist</key>
704 <integer>1</integer> 997 <integer>1</integer>
705 <key>Type</key> 998 <key>Type</key>
706 <string>Boolean</string> 999 <string>Boolean</string>
707 <key>Value</key> 1000 <key>Value</key>
708 <integer>0</integer> 1001 <integer>0</integer>
709 </map> 1002 </map>
710 <key>CameraOffsetBuild</key> 1003 <key>CameraOffsetBuild</key>
711 <map> 1004 <map>
712 <key>Comment</key> 1005 <key>Comment</key>
713 <string>Default camera position relative to focus point when entering build mode</string> 1006 <string>Default camera position relative to focus point when entering build mode</string>
714 <key>Persist</key> 1007 <key>Persist</key>
715 <integer>1</integer> 1008 <integer>1</integer>
716 <key>Type</key> 1009 <key>Type</key>
717 <string>Vector3</string> 1010 <string>Vector3</string>
718 <key>Value</key> 1011 <key>Value</key>
719 <array> 1012 <array>
720 <real>-6</real> 1013 <real>-6.0</real>
721 <real>0</real> 1014 <real>0.0</real>
722 <real>6</real> 1015 <real>6.0</real>
723 </array> 1016 </array>
724 </map> 1017 </map>
725 <key>CameraOffsetDefault</key> 1018 <key>CameraOffsetDefault</key>
726 <map> 1019 <map>
727 <key>Comment</key> 1020 <key>Comment</key>
728 <string>Default camera offset from avatar</string> 1021 <string>Default camera offset from avatar</string>
729 <key>Persist</key> 1022 <key>Persist</key>
730 <integer>1</integer> 1023 <integer>1</integer>
731 <key>Type</key> 1024 <key>Type</key>
732 <string>Vector3</string> 1025 <string>Vector3</string>
733 <key>Value</key> 1026 <key>Value</key>
734 <array> 1027 <array>
735 <real>-3</real> 1028 <real>-3.0</real>
736 <real>0</real> 1029 <real>0.0</real>
737 <real>0.75</real> 1030 <real>0.75</real>
738 </array> 1031 </array>
739 </map> 1032 </map>
740 <key>CameraPositionSmoothing</key>
741 <map>
742 <key>Comment</key>
743 <string>Smooths camera position over time</string>
744 <key>Persist</key>
745 <integer>1</integer>
746 <key>Type</key>
747 <string>F32</string>
748 <key>Value</key>
749 <real>1.0</real>
750 </map>
751 <key>CameraPosOnLogout</key> 1033 <key>CameraPosOnLogout</key>
752 <map> 1034 <map>
753 <key>Comment</key> 1035 <key>Comment</key>
754 <string>Camera position when last logged out (global coordinates)</string> 1036 <string>Camera position when last logged out (global coordinates)</string>
755 <key>Persist</key> 1037 <key>Persist</key>
756 <integer>1</integer> 1038 <integer>1</integer>
757 <key>Type</key> 1039 <key>Type</key>
758 <string>Vector3D</string> 1040 <string>Vector3D</string>
759 <key>Value</key> 1041 <key>Value</key>
760 <array> 1042 <array>
761 <real>0</real> 1043 <real>0.0</real>
762 <real>0</real> 1044 <real>0.0</real>
763 <real>0</real> 1045 <real>0.0</real>
764 </array> 1046 </array>
765 </map> 1047 </map>
766 <key>CameraMouseWheelZoom</key> 1048 <key>CameraPositionSmoothing</key>
767 <map> 1049 <map>
768 <key>Comment</key> 1050 <key>Comment</key>
769 <string>Camera zooms in and out with mousewheel</string> 1051 <string>Smooths camera position over time</string>
770 <key>Persist</key> 1052 <key>Persist</key>
771 <integer>1</integer> 1053 <integer>1</integer>
772 <key>Type</key> 1054 <key>Type</key>
773 <string>Boolean</string> 1055 <string>F32</string>
774 <key>Value</key> 1056 <key>Value</key>
775 <integer>1</integer> 1057 <real>1.0</real>
776 </map> 1058 </map>
777 <key>ChatBarStealsFocus</key> 1059 <key>ChatBarStealsFocus</key>
778 <map> 1060 <map>
779 <key>Comment</key> 1061 <key>Comment</key>
780 <string>Whenever keyboard focus is removed from the UI, and the chat bar is visible, the chat bar takes focus</string> 1062 <string>Whenever keyboard focus is removed from the UI, and the chat bar is visible, the chat bar takes focus</string>
781 <key>Persist</key> 1063 <key>Persist</key>
782 <integer>1</integer> 1064 <integer>1</integer>
783 <key>Type</key> 1065 <key>Type</key>
784 <string>Boolean</string> 1066 <string>Boolean</string>
785 <key>Value</key> 1067 <key>Value</key>
786 <integer>1</integer> 1068 <integer>1</integer>
787 </map> 1069 </map>
788 <key>ChatBubbleOpacity</key> 1070 <key>ChatBubbleOpacity</key>
789 <map> 1071 <map>
790 <key>Comment</key> 1072 <key>Comment</key>
791 <string>Opacity of chat bubble background (0.0 = completely transparent, 1.0 = completely opaque)</string> 1073 <string>Opacity of chat bubble background (0.0 = completely transparent, 1.0 = completely opaque)</string>
792 <key>Persist</key> 1074 <key>Persist</key>
793 <integer>1</integer> 1075 <integer>1</integer>
794 <key>Type</key> 1076 <key>Type</key>
795 <string>F32</string> 1077 <string>F32</string>
796 <key>Value</key> 1078 <key>Value</key>
797 <real>0.5</real> 1079 <real>0.5</real>
798 </map> 1080 </map>
799 <key>ChatFontSize</key> 1081 <key>ChatFontSize</key>
800 <map> 1082 <map>
801 <key>Comment</key> 1083 <key>Comment</key>
802 <string>Size of chat text in chat console (0 = small, 1 = big)</string> 1084 <string>Size of chat text in chat console (0 = small, 1 = big)</string>
803 <key>Persist</key> 1085 <key>Persist</key>
804 <integer>1</integer> 1086 <integer>1</integer>
805 <key>Type</key> 1087 <key>Type</key>
806 <string>S32</string> 1088 <string>S32</string>
807 <key>Value</key> 1089 <key>Value</key>
808 <integer>1</integer> 1090 <integer>1</integer>
809 </map> 1091 </map>
810 <key>ChatFullWidth</key> 1092 <key>ChatFullWidth</key>
811 <map> 1093 <map>
812 <key>Comment</key> 1094 <key>Comment</key>
813 <string>Chat console takes up full width of SL window</string> 1095 <string>Chat console takes up full width of SL window</string>
814 <key>Persist</key> 1096 <key>Persist</key>
815 <integer>1</integer> 1097 <integer>1</integer>
816 <key>Type</key> 1098 <key>Type</key>
817 <string>Boolean</string> 1099 <string>Boolean</string>
818 <key>Value</key> 1100 <key>Value</key>
819 <integer>1</integer> 1101 <integer>1</integer>
820 </map> 1102 </map>
821 <key>ChatHistoryTornOff</key> 1103 <key>ChatHistoryTornOff</key>
822 <map> 1104 <map>
823 <key>Comment</key> 1105 <key>Comment</key>
824 <string>Show chat history window separately from Communicate window.</string> 1106 <string>Show chat history window separately from Communicate window.</string>
825 <key>Persist</key> 1107 <key>Persist</key>
826 <integer>1</integer> 1108 <integer>1</integer>
827 <key>Type</key> 1109 <key>Type</key>
828 <string>Boolean</string> 1110 <string>Boolean</string>
829 <key>Value</key> 1111 <key>Value</key>
830 <integer>0</integer> 1112 <integer>0</integer>
831 </map> 1113 </map>
832 <key>ChatOnlineNotification</key> 1114 <key>ChatOnlineNotification</key>
833 <map> 1115 <map>
834 <key>Comment</key> 1116 <key>Comment</key>
835 <string>Provide notifications for when friend log on and off of SL</string> 1117 <string>Provide notifications for when friend log on and off of SL</string>
836 <key>Persist</key> 1118 <key>Persist</key>
837 <integer>1</integer> 1119 <integer>1</integer>
838 <key>Type</key> 1120 <key>Type</key>
839 <string>Boolean</string> 1121 <string>Boolean</string>
840 <key>Value</key> 1122 <key>Value</key>
841 <integer>1</integer> 1123 <integer>1</integer>
842 </map> 1124 </map>
843 <key>ChatPersistTime</key> 1125 <key>ChatPersistTime</key>
844 <map> 1126 <map>
845 <key>Comment</key> 1127 <key>Comment</key>
846 <string>Time for which chat stays visible in console (seconds)</string> 1128 <string>Time for which chat stays visible in console (seconds)</string>
847 <key>Persist</key> 1129 <key>Persist</key>
848 <integer>1</integer> 1130 <integer>1</integer>
849 <key>Type</key> 1131 <key>Type</key>
850 <string>F32</string> 1132 <string>F32</string>
851 <key>Value</key> 1133 <key>Value</key>
852 <real>15</real> 1134 <real>15.0</real>
853 </map> 1135 </map>
854 <key>ChatShowTimestamps</key> 1136 <key>ChatShowTimestamps</key>
855 <map> 1137 <map>
856 <key>Comment</key> 1138 <key>Comment</key>
857 <string>Show timestamps in chat</string> 1139 <string>Show timestamps in chat</string>
858 <key>Persist</key> 1140 <key>Persist</key>
859 <integer>1</integer> 1141 <integer>1</integer>
860 <key>Type</key> 1142 <key>Type</key>
861 <string>Boolean</string> 1143 <string>Boolean</string>
862 <key>Value</key> 1144 <key>Value</key>
863 <integer>1</integer> 1145 <integer>1</integer>
864 </map> 1146 </map>
865 <key>ChatVisible</key> 1147 <key>ChatVisible</key>
866 <map> 1148 <map>
867 <key>Comment</key> 1149 <key>Comment</key>
868 <string>Chat bar is visible</string> 1150 <string>Chat bar is visible</string>
869 <key>Persist</key> 1151 <key>Persist</key>
870 <integer>1</integer> 1152 <integer>1</integer>
871 <key>Type</key> 1153 <key>Type</key>
872 <string>Boolean</string> 1154 <string>Boolean</string>
873 <key>Value</key> 1155 <key>Value</key>
874 <integer>1</integer> 1156 <integer>1</integer>
875 </map> 1157 </map>
876 <key>ChatterboxRect</key> 1158 <key>ChatterboxRect</key>
877 <map> 1159 <map>
878 <key>Comment</key> 1160 <key>Comment</key>
879 <string>Rectangle for chatterbox window</string> 1161 <string>Rectangle for chatterbox window</string>
880 <key>Persist</key> 1162 <key>Persist</key>
881 <integer>1</integer> 1163 <integer>1</integer>
882 <key>Type</key> 1164 <key>Type</key>
883 <string>Rect</string> 1165 <string>Rect</string>
884 <key>Value</key> 1166 <key>Value</key>
885 <array> 1167 <array>
886 <integer>0</integer> 1168 <integer>0</integer>
887 <integer>400</integer> 1169 <integer>400</integer>
888 <integer>350</integer> 1170 <integer>350</integer>
889 <integer>0</integer> 1171 <integer>0</integer>
890 </array> 1172 </array>
891 </map> 1173 </map>
892 <key>CheesyBeacon</key> 1174 <key>CheesyBeacon</key>
893 <map> 1175 <map>
894 <key>Comment</key> 1176 <key>Comment</key>
895 <string>Enable cheesy beacon effects</string> 1177 <string>Enable cheesy beacon effects</string>
896 <key>Persist</key> 1178 <key>Persist</key>
897 <integer>1</integer> 1179 <integer>1</integer>
898 <key>Type</key> 1180 <key>Type</key>
899 <string>Boolean</string> 1181 <string>Boolean</string>
900 <key>Value</key> 1182 <key>Value</key>
901 <integer>0</integer> 1183 <integer>0</integer>
902 </map> 1184 </map>
903 <key>ClientSettingsFile</key> 1185 <key>ClientSettingsFile</key>
904 <map> 1186 <map>
905 <key>Comment</key> 1187 <key>Comment</key>
906 <string>Persisted client settings file name (per install).</string> 1188 <string>Persisted client settings file name (per install).</string>
907 <key>Persist</key> 1189 <key>Persist</key>
908 <integer>0</integer> 1190 <integer>0</integer>
909 <key>Type</key> 1191 <key>Type</key>
910 <string>String</string> 1192 <string>String</string>
911 <key>Value</key> 1193 <key>Value</key>
912 <string /> 1194 <string />
913 </map> 1195 </map>
914 <key>CloseChatOnReturn</key> 1196 <key>CloseChatOnReturn</key>
915 <map> 1197 <map>
916 <key>Comment</key> 1198 <key>Comment</key>
917 <string>Close chat after hitting return</string> 1199 <string>Close chat after hitting return</string>
918 <key>Persist</key> 1200 <key>Persist</key>
919 <integer>1</integer> 1201 <integer>1</integer>
920 <key>Type</key> 1202 <key>Type</key>
921 <string>Boolean</string> 1203 <string>Boolean</string>
922 <key>Value</key> 1204 <key>Value</key>
923 <integer>0</integer> 1205 <integer>0</integer>
924 </map> 1206 </map>
925 <key>CloseSnapshotOnKeep</key> 1207 <key>CloseSnapshotOnKeep</key>
926 <map> 1208 <map>
927 <key>Comment</key> 1209 <key>Comment</key>
928 <string>Close snapshot window after saving snapshot</string> 1210 <string>Close snapshot window after saving snapshot</string>
929 <key>Persist</key> 1211 <key>Persist</key>
930 <integer>1</integer> 1212 <integer>1</integer>
931 <key>Type</key> 1213 <key>Type</key>
932 <string>Boolean</string> 1214 <string>Boolean</string>
933 <key>Value</key> 1215 <key>Value</key>
934 <integer>1</integer> 1216 <integer>1</integer>
935 </map> 1217 </map>
936 <key>ClothingBtnState</key> 1218 <key>ClothingBtnState</key>
937 <map> 1219 <map>
938 <key>Comment</key> 1220 <key>Comment</key>
939 <string /> 1221 <string />
940 <key>Persist</key> 1222 <key>Persist</key>
941 <integer>0</integer> 1223 <integer>0</integer>
942 <key>Type</key> 1224 <key>Type</key>
943 <string>Boolean</string> 1225 <string>Boolean</string>
944 <key>Value</key> 1226 <key>Value</key>
945 <integer>0</integer> 1227 <integer>0</integer>
946 </map> 1228 </map>
947 <key>CmdLineDisableVoice</key> 1229 <key>CmdLineDisableVoice</key>
948 <map> 1230 <map>
949 <key>Comment</key> 1231 <key>Comment</key>
950 <string>Disable Voice.</string> 1232 <string>Disable Voice.</string>
951 <key>Persist</key> 1233 <key>Persist</key>
952 <integer>0</integer> 1234 <integer>0</integer>
953 <key>Type</key> 1235 <key>Type</key>
954 <string>Boolean</string> 1236 <string>Boolean</string>
955 <key>Value</key> 1237 <key>Value</key>
956 <integer>0</integer> 1238 <integer>0</integer>
957 </map> 1239 </map>
1240 <key>CmdLineGridChoice</key>
1241 <map>
1242 <key>Comment</key>
1243 <string>The user's grid choice or ip address.</string>
1244 <key>Persist</key>
1245 <integer>0</integer>
1246 <key>Type</key>
1247 <string>String</string>
1248 <key>Value</key>
1249 <string />
1250 </map>
1251 <key>CmdLineHelperURI</key>
1252 <map>
1253 <key>Comment</key>
1254 <string>Command line specified helper web CGI prefix to use.</string>
1255 <key>Persist</key>
1256 <integer>0</integer>
1257 <key>Type</key>
1258 <string>String</string>
1259 <key>Value</key>
1260 <string />
1261 </map>
1262 <key>CmdLineLoginURI</key>
1263 <map>
1264 <key>Comment</key>
1265 <string>Command line specified login server and CGI prefix to use.</string>
1266 <key>Persist</key>
1267 <integer>0</integer>
1268 <key>Type</key>
1269 <string>LLSD</string>
1270 <key>Value</key>
1271 <array>
1272 <string />
1273 </array>
1274 </map>
958 <key>ColorPaletteEntry01</key> 1275 <key>ColorPaletteEntry01</key>
959 <map> 1276 <map>
960 <key>Comment</key> 1277 <key>Comment</key>
961 <string>Color picker palette entry</string> 1278 <string>Color picker palette entry</string>
962 <key>Persist</key> 1279 <key>Persist</key>
963 <integer>1</integer> 1280 <integer>1</integer>
964 <key>Type</key> 1281 <key>Type</key>
965 <string>Color4</string> 1282 <string>Color4</string>
966 <key>Value</key> 1283 <key>Value</key>
967 <array> 1284 <array>
968 <real>0</real> 1285 <real>0.0</real>
969 <real>0</real> 1286 <real>0.0</real>
970 <real>0</real> 1287 <real>0.0</real>
971 <real>1</real> 1288 <real>1.0</real>
972 </array> 1289 </array>
973 </map> 1290 </map>
974 <key>ColorPaletteEntry02</key> 1291 <key>ColorPaletteEntry02</key>
975 <map> 1292 <map>
976 <key>Comment</key> 1293 <key>Comment</key>
977 <string>Color picker palette entry</string> 1294 <string>Color picker palette entry</string>
978 <key>Persist</key> 1295 <key>Persist</key>
979 <integer>1</integer> 1296 <integer>1</integer>
980 <key>Type</key> 1297 <key>Type</key>
981 <string>Color4</string> 1298 <string>Color4</string>
982 <key>Value</key> 1299 <key>Value</key>
983 <array> 1300 <array>
984 <real>0.5</real> 1301 <real>0.5</real>
985 <real>0.5</real> 1302 <real>0.5</real>
986 <real>0.5</real> 1303 <real>0.5</real>
987 <real>1</real> 1304 <real>1.0</real>
988 </array> 1305 </array>
989 </map> 1306 </map>
990 <key>ColorPaletteEntry03</key> 1307 <key>ColorPaletteEntry03</key>
991 <map> 1308 <map>
992 <key>Comment</key> 1309 <key>Comment</key>
993 <string>Color picker palette entry</string> 1310 <string>Color picker palette entry</string>
994 <key>Persist</key> 1311 <key>Persist</key>
995 <integer>1</integer> 1312 <integer>1</integer>
996 <key>Type</key> 1313 <key>Type</key>
997 <string>Color4</string> 1314 <string>Color4</string>
998 <key>Value</key> 1315 <key>Value</key>
999 <array> 1316 <array>
1000 <real>0.5</real> 1317 <real>0.5</real>
1001 <real>0</real> 1318 <real>0.0</real>
1002 <real>0</real> 1319 <real>0.0</real>
1003 <real>1</real> 1320 <real>1.0</real>
1004 </array> 1321 </array>
1005 </map> 1322 </map>
1006 <key>ColorPaletteEntry04</key> 1323 <key>ColorPaletteEntry04</key>
1007 <map> 1324 <map>
1008 <key>Comment</key> 1325 <key>Comment</key>
1009 <string>Color picker palette entry</string> 1326 <string>Color picker palette entry</string>
1010 <key>Persist</key> 1327 <key>Persist</key>
1011 <integer>1</integer> 1328 <integer>1</integer>
1012 <key>Type</key> 1329 <key>Type</key>
1013 <string>Color4</string> 1330 <string>Color4</string>
1014 <key>Value</key> 1331 <key>Value</key>
1015 <array> 1332 <array>
1016 <real>0.5</real> 1333 <real>0.5</real>
1017 <real>0.5</real> 1334 <real>0.5</real>
1018 <real>0</real> 1335 <real>0.0</real>
1019 <real>1</real> 1336 <real>1.0</real>
1020 </array> 1337 </array>
1021 </map> 1338 </map>
1022 <key>ColorPaletteEntry05</key> 1339 <key>ColorPaletteEntry05</key>
1023 <map> 1340 <map>
1024 <key>Comment</key> 1341 <key>Comment</key>
1025 <string>Color picker palette entry</string> 1342 <string>Color picker palette entry</string>
1026 <key>Persist</key> 1343 <key>Persist</key>
1027 <integer>1</integer> 1344 <integer>1</integer>
1028 <key>Type</key> 1345 <key>Type</key>
1029 <string>Color4</string> 1346 <string>Color4</string>
1030 <key>Value</key> 1347 <key>Value</key>
1031 <array> 1348 <array>
1032 <real>0</real> 1349 <real>0.0</real>
1033 <real>0.5</real> 1350 <real>0.5</real>
1034 <real>0</real> 1351 <real>0.0</real>
1035 <real>1</real> 1352 <real>1.0</real>
1036 </array> 1353 </array>
1037 </map> 1354 </map>
1038 <key>ColorPaletteEntry06</key> 1355 <key>ColorPaletteEntry06</key>
1039 <map> 1356 <map>
1040 <key>Comment</key> 1357 <key>Comment</key>
1041 <string>Color picker palette entry</string> 1358 <string>Color picker palette entry</string>
1042 <key>Persist</key> 1359 <key>Persist</key>
1043 <integer>1</integer> 1360 <integer>1</integer>
1044 <key>Type</key> 1361 <key>Type</key>
1045 <string>Color4</string> 1362 <string>Color4</string>
1046 <key>Value</key> 1363 <key>Value</key>
1047 <array> 1364 <array>
1048 <real>0</real> 1365 <real>0.0</real>
1049 <real>0.5</real> 1366 <real>0.5</real>
1050 <real>0.5</real> 1367 <real>0.5</real>
1051 <real>1</real> 1368 <real>1.0</real>
1052 </array> 1369 </array>
1053 </map> 1370 </map>
1054 <key>ColorPaletteEntry07</key> 1371 <key>ColorPaletteEntry07</key>
1055 <map> 1372 <map>
1056 <key>Comment</key> 1373 <key>Comment</key>
1057 <string>Color picker palette entry</string> 1374 <string>Color picker palette entry</string>
1058 <key>Persist</key> 1375 <key>Persist</key>
1059 <integer>1</integer> 1376 <integer>1</integer>
1060 <key>Type</key> 1377 <key>Type</key>
1061 <string>Color4</string> 1378 <string>Color4</string>
1062 <key>Value</key> 1379 <key>Value</key>
1063 <array> 1380 <array>
1064 <real>0</real> 1381 <real>0.0</real>
1065 <real>0</real> 1382 <real>0.0</real>
1066 <real>0.5</real> 1383 <real>0.5</real>
1067 <real>1</real> 1384 <real>1.0</real>
1068 </array> 1385 </array>
1069 </map> 1386 </map>
1070 <key>ColorPaletteEntry08</key> 1387 <key>ColorPaletteEntry08</key>
1071 <map> 1388 <map>
1072 <key>Comment</key> 1389 <key>Comment</key>
1073 <string>Color picker palette entry</string> 1390 <string>Color picker palette entry</string>
1074 <key>Persist</key> 1391 <key>Persist</key>
1075 <integer>1</integer> 1392 <integer>1</integer>
1076 <key>Type</key> 1393 <key>Type</key>
1077 <string>Color4</string> 1394 <string>Color4</string>
1078 <key>Value</key> 1395 <key>Value</key>
1079 <array> 1396 <array>
1080 <real>0.5</real> 1397 <real>0.5</real>
1081 <real>0</real> 1398 <real>0.0</real>
1082 <real>0.5</real> 1399 <real>0.5</real>
1083 <real>1</real> 1400 <real>1.0</real>
1084 </array> 1401 </array>
1085 </map> 1402 </map>
1086 <key>ColorPaletteEntry09</key> 1403 <key>ColorPaletteEntry09</key>
1087 <map> 1404 <map>
1088 <key>Comment</key> 1405 <key>Comment</key>
1089 <string>Color picker palette entry</string> 1406 <string>Color picker palette entry</string>
1090 <key>Persist</key> 1407 <key>Persist</key>
1091 <integer>1</integer> 1408 <integer>1</integer>
1092 <key>Type</key> 1409 <key>Type</key>
1093 <string>Color4</string> 1410 <string>Color4</string>
1094 <key>Value</key> 1411 <key>Value</key>
1095 <array> 1412 <array>
1096 <real>0.5</real> 1413 <real>0.5</real>
1097 <real>0.5</real> 1414 <real>0.5</real>
1098 <real>0</real> 1415 <real>0.0</real>
1099 <real>1</real> 1416 <real>1.0</real>
1100 </array> 1417 </array>
1101 </map> 1418 </map>
1102 <key>ColorPaletteEntry10</key> 1419 <key>ColorPaletteEntry10</key>
1103 <map> 1420 <map>
1104 <key>Comment</key> 1421 <key>Comment</key>
1105 <string>Color picker palette entry</string> 1422 <string>Color picker palette entry</string>
1106 <key>Persist</key> 1423 <key>Persist</key>
1107 <integer>1</integer> 1424 <integer>1</integer>
1108 <key>Type</key> 1425 <key>Type</key>
1109 <string>Color4</string> 1426 <string>Color4</string>
1110 <key>Value</key> 1427 <key>Value</key>
1111 <array> 1428 <array>
1112 <real>0</real> 1429 <real>0.0</real>
1113 <real>0.25</real> 1430 <real>0.25</real>
1114 <real>0.25</real> 1431 <real>0.25</real>
1115 <real>1</real> 1432 <real>1.0</real>
1116 </array> 1433 </array>
1117 </map> 1434 </map>
1118 <key>ColorPaletteEntry11</key> 1435 <key>ColorPaletteEntry11</key>
1119 <map> 1436 <map>
1120 <key>Comment</key> 1437 <key>Comment</key>
1121 <string>Color picker palette entry</string> 1438 <string>Color picker palette entry</string>
1122 <key>Persist</key> 1439 <key>Persist</key>
1123 <integer>1</integer> 1440 <integer>1</integer>
1124 <key>Type</key> 1441 <key>Type</key>
1125 <string>Color4</string> 1442 <string>Color4</string>
1126 <key>Value</key> 1443 <key>Value</key>
1127 <array> 1444 <array>
1128 <real>0</real> 1445 <real>0.0</real>
1129 <real>0.5</real> 1446 <real>0.5</real>
1130 <real>1</real> 1447 <real>1.0</real>
1131 <real>1</real> 1448 <real>1.0</real>
1132 </array> 1449 </array>
1133 </map> 1450 </map>
1134 <key>ColorPaletteEntry12</key> 1451 <key>ColorPaletteEntry12</key>
1135 <map> 1452 <map>
1136 <key>Comment</key> 1453 <key>Comment</key>
1137 <string>Color picker palette entry</string> 1454 <string>Color picker palette entry</string>
1138 <key>Persist</key> 1455 <key>Persist</key>
1139 <integer>1</integer> 1456 <integer>1</integer>
1140 <key>Type</key> 1457 <key>Type</key>
1141 <string>Color4</string> 1458 <string>Color4</string>
1142 <key>Value</key> 1459 <key>Value</key>
1143 <array> 1460 <array>
1144 <real>0</real> 1461 <real>0.0</real>
1145 <real>0.25</real> 1462 <real>0.25</real>
1146 <real>0.5</real> 1463 <real>0.5</real>
1147 <real>1</real> 1464 <real>1.0</real>
1148 </array> 1465 </array>
1149 </map> 1466 </map>
1150 <key>ColorPaletteEntry13</key> 1467 <key>ColorPaletteEntry13</key>
1151 <map> 1468 <map>
1152 <key>Comment</key> 1469 <key>Comment</key>
1153 <string>Color picker palette entry</string> 1470 <string>Color picker palette entry</string>
1154 <key>Persist</key> 1471 <key>Persist</key>
1155 <integer>1</integer> 1472 <integer>1</integer>
1156 <key>Type</key> 1473 <key>Type</key>
1157 <string>Color4</string> 1474 <string>Color4</string>
1158 <key>Value</key> 1475 <key>Value</key>
1159 <array> 1476 <array>
1160 <real>0.5</real> 1477 <real>0.5</real>
1161 <real>0</real> 1478 <real>0.0</real>
1162 <real>1</real> 1479 <real>1.0</real>
1163 <real>1</real> 1480 <real>1.0</real>
1164 </array> 1481 </array>
1165 </map> 1482 </map>
1166 <key>ColorPaletteEntry14</key> 1483 <key>ColorPaletteEntry14</key>
1167 <map> 1484 <map>
1168 <key>Comment</key> 1485 <key>Comment</key>
1169 <string>Color picker palette entry</string> 1486 <string>Color picker palette entry</string>
1170 <key>Persist</key> 1487 <key>Persist</key>
1171 <integer>1</integer> 1488 <integer>1</integer>
1172 <key>Type</key> 1489 <key>Type</key>
1173 <string>Color4</string> 1490 <string>Color4</string>
1174 <key>Value</key> 1491 <key>Value</key>
1175 <array> 1492 <array>
1176 <real>0.5</real> 1493 <real>0.5</real>
1177 <real>0.25</real> 1494 <real>0.25</real>
1178 <real>0</real> 1495 <real>0.0</real>
1179 <real>1</real> 1496 <real>1.0</real>
1180 </array> 1497 </array>
1181 </map> 1498 </map>
1182 <key>ColorPaletteEntry15</key> 1499 <key>ColorPaletteEntry15</key>
1183 <map> 1500 <map>
1184 <key>Comment</key> 1501 <key>Comment</key>
1185 <string>Color picker palette entry</string> 1502 <string>Color picker palette entry</string>
1186 <key>Persist</key> 1503 <key>Persist</key>
1187 <integer>1</integer> 1504 <integer>1</integer>
1188 <key>Type</key> 1505 <key>Type</key>
1189 <string>Color4</string> 1506 <string>Color4</string>
1190 <key>Value</key> 1507 <key>Value</key>
1191 <array> 1508 <array>
1192 <real>1</real> 1509 <real>1.0</real>
1193 <real>1</real> 1510 <real>1.0</real>
1194 <real>1</real> 1511 <real>1.0</real>
1195 <real>1</real> 1512 <real>1.0</real>
1196 </array> 1513 </array>
1197 </map> 1514 </map>
1198 <key>ColorPaletteEntry16</key> 1515 <key>ColorPaletteEntry16</key>
1199 <map> 1516 <map>
1200 <key>Comment</key> 1517 <key>Comment</key>
1201 <string>Color picker palette entry</string> 1518 <string>Color picker palette entry</string>
1202 <key>Persist</key> 1519 <key>Persist</key>
1203 <integer>1</integer> 1520 <integer>1</integer>
1204 <key>Type</key> 1521 <key>Type</key>
1205 <string>Color4</string> 1522 <string>Color4</string>
1206 <key>Value</key> 1523 <key>Value</key>
1207 <array> 1524 <array>
1208 <real>1</real> 1525 <real>1.0</real>
1209 <real>1</real> 1526 <real>1.0</real>
1210 <real>1</real> 1527 <real>1.0</real>
1211 <real>1</real> 1528 <real>1.0</real>
1212 </array> 1529 </array>
1213 </map> 1530 </map>
1214 <key>ColorPaletteEntry17</key> 1531 <key>ColorPaletteEntry17</key>
1215 <map> 1532 <map>
1216 <key>Comment</key> 1533 <key>Comment</key>
1217 <string>Color picker palette entry</string> 1534 <string>Color picker palette entry</string>
1218 <key>Persist</key> 1535 <key>Persist</key>
1219 <integer>1</integer> 1536 <integer>1</integer>
1220 <key>Type</key> 1537 <key>Type</key>
1221 <string>Color4</string> 1538 <string>Color4</string>
1222 <key>Value</key> 1539 <key>Value</key>
1223 <array> 1540 <array>
1224 <real>1</real> 1541 <real>1.0</real>
1225 <real>1</real> 1542 <real>1.0</real>
1226 <real>1</real> 1543 <real>1.0</real>
1227 <real>1</real> 1544 <real>1.0</real>
1228 </array> 1545 </array>
1229 </map> 1546 </map>
1230 <key>ColorPaletteEntry18</key> 1547 <key>ColorPaletteEntry18</key>
1231 <map> 1548 <map>
1232 <key>Comment</key> 1549 <key>Comment</key>
1233 <string>Color picker palette entry</string> 1550 <string>Color picker palette entry</string>
1234 <key>Persist</key> 1551 <key>Persist</key>
1235 <integer>1</integer> 1552 <integer>1</integer>
1236 <key>Type</key> 1553 <key>Type</key>
1237 <string>Color4</string> 1554 <string>Color4</string>
1238 <key>Value</key> 1555 <key>Value</key>
1239 <array> 1556 <array>
1240 <real>0.75</real> 1557 <real>0.75</real>
1241 <real>0.75</real> 1558 <real>0.75</real>
1242 <real>0.75</real> 1559 <real>0.75</real>
1243 <real>1</real> 1560 <real>1.0</real>
1244 </array> 1561 </array>
1245 </map> 1562 </map>
1246 <key>ColorPaletteEntry19</key> 1563 <key>ColorPaletteEntry19</key>
1247 <map> 1564 <map>
1248 <key>Comment</key> 1565 <key>Comment</key>
1249 <string>Color picker palette entry</string> 1566 <string>Color picker palette entry</string>
1250 <key>Persist</key> 1567 <key>Persist</key>
1251 <integer>1</integer> 1568 <integer>1</integer>
1252 <key>Type</key> 1569 <key>Type</key>
1253 <string>Color4</string> 1570 <string>Color4</string>
1254 <key>Value</key> 1571 <key>Value</key>
1255 <array> 1572 <array>
1256 <real>1</real> 1573 <real>1.0</real>
1257 <real>0</real> 1574 <real>0.0</real>
1258 <real>0</real> 1575 <real>0.0</real>
1259 <real>1</real> 1576 <real>1.0</real>
1260 </array> 1577 </array>
1261 </map> 1578 </map>
1262 <key>ColorPaletteEntry20</key> 1579 <key>ColorPaletteEntry20</key>
1263 <map> 1580 <map>
1264 <key>Comment</key> 1581 <key>Comment</key>
1265 <string>Color picker palette entry</string> 1582 <string>Color picker palette entry</string>
1266 <key>Persist</key> 1583 <key>Persist</key>
1267 <integer>1</integer> 1584 <integer>1</integer>
1268 <key>Type</key> 1585 <key>Type</key>
1269 <string>Color4</string> 1586 <string>Color4</string>
1270 <key>Value</key> 1587 <key>Value</key>
1271 <array> 1588 <array>
1272 <real>1</real> 1589 <real>1.0</real>
1273 <real>1</real> 1590 <real>1.0</real>
1274 <real>0</real> 1591 <real>0.0</real>
1275 <real>1</real> 1592 <real>1.0</real>
1276 </array> 1593 </array>
1277 </map> 1594 </map>
1278 <key>ColorPaletteEntry21</key> 1595 <key>ColorPaletteEntry21</key>
1279 <map> 1596 <map>
1280 <key>Comment</key> 1597 <key>Comment</key>
1281 <string>Color picker palette entry</string> 1598 <string>Color picker palette entry</string>
1282 <key>Persist</key> 1599 <key>Persist</key>
1283 <integer>1</integer> 1600 <integer>1</integer>
1284 <key>Type</key> 1601 <key>Type</key>
1285 <string>Color4</string> 1602 <string>Color4</string>
1286 <key>Value</key> 1603 <key>Value</key>
1287 <array> 1604 <array>
1288 <real>0</real> 1605 <real>0.0</real>
1289 <real>1</real> 1606 <real>1.0</real>
1290 <real>0</real> 1607 <real>0.0</real>
1291 <real>1</real> 1608 <real>1.0</real>
1292 </array> 1609 </array>
1293 </map> 1610 </map>
1294 <key>ColorPaletteEntry22</key> 1611 <key>ColorPaletteEntry22</key>
1295 <map> 1612 <map>
1296 <key>Comment</key> 1613 <key>Comment</key>
1297 <string>Color picker palette entry</string> 1614 <string>Color picker palette entry</string>
1298 <key>Persist</key> 1615 <key>Persist</key>
1299 <integer>1</integer> 1616 <integer>1</integer>
1300 <key>Type</key> 1617 <key>Type</key>
1301 <string>Color4</string> 1618 <string>Color4</string>
1302 <key>Value</key> 1619 <key>Value</key>
1303 <array> 1620 <array>
1304 <real>0</real> 1621 <real>0.0</real>
1305 <real>1</real> 1622 <real>1.0</real>
1306 <real>1</real> 1623 <real>1.0</real>
1307 <real>1</real> 1624 <real>1.0</real>
1308 </array> 1625 </array>
1309 </map> 1626 </map>
1310 <key>ColorPaletteEntry23</key> 1627 <key>ColorPaletteEntry23</key>
1311 <map> 1628 <map>
1312 <key>Comment</key> 1629 <key>Comment</key>
1313 <string>Color picker palette entry</string> 1630 <string>Color picker palette entry</string>
1314 <key>Persist</key> 1631 <key>Persist</key>
1315 <integer>1</integer> 1632 <integer>1</integer>
1316 <key>Type</key> 1633 <key>Type</key>
1317 <string>Color4</string> 1634 <string>Color4</string>
1318 <key>Value</key> 1635 <key>Value</key>
1319 <array> 1636 <array>
1320 <real>0</real> 1637 <real>0.0</real>
1321 <real>0</real> 1638 <real>0.0</real>
1322 <real>1</real> 1639 <real>1.0</real>
1323 <real>1</real> 1640 <real>1.0</real>
1324 </array> 1641 </array>
1325 </map> 1642 </map>
1326 <key>ColorPaletteEntry24</key> 1643 <key>ColorPaletteEntry24</key>
1327 <map> 1644 <map>
1328 <key>Comment</key> 1645 <key>Comment</key>
1329 <string>Color picker palette entry</string> 1646 <string>Color picker palette entry</string>
1330 <key>Persist</key> 1647 <key>Persist</key>
1331 <integer>1</integer> 1648 <integer>1</integer>
1332 <key>Type</key> 1649 <key>Type</key>
1333 <string>Color4</string> 1650 <string>Color4</string>
1334 <key>Value</key> 1651 <key>Value</key>
1335 <array> 1652 <array>
1336 <real>1</real> 1653 <real>1.0</real>
1337 <real>0</real> 1654 <real>0.0</real>
1338 <real>1</real> 1655 <real>1.0</real>
1339 <real>1</real> 1656 <real>1.0</real>
1340 </array> 1657 </array>
1341 </map> 1658 </map>
1342 <key>ColorPaletteEntry25</key> 1659 <key>ColorPaletteEntry25</key>
1343 <map> 1660 <map>
1344 <key>Comment</key> 1661 <key>Comment</key>
1345 <string>Color picker palette entry</string> 1662 <string>Color picker palette entry</string>
1346 <key>Persist</key> 1663 <key>Persist</key>
1347 <integer>1</integer> 1664 <integer>1</integer>
1348 <key>Type</key> 1665 <key>Type</key>
1349 <string>Color4</string> 1666 <string>Color4</string>
1350 <key>Value</key> 1667 <key>Value</key>
1351 <array> 1668 <array>
1352 <real>1</real> 1669 <real>1.0</real>
1353 <real>1</real> 1670 <real>1.0</real>
1354 <real>0.5</real> 1671 <real>0.5</real>
1355 <real>1</real> 1672 <real>1.0</real>
1356 </array> 1673 </array>
1357 </map> 1674 </map>
1358 <key>ColorPaletteEntry26</key> 1675 <key>ColorPaletteEntry26</key>
1359 <map> 1676 <map>
1360 <key>Comment</key> 1677 <key>Comment</key>
1361 <string>Color picker palette entry</string> 1678 <string>Color picker palette entry</string>
1362 <key>Persist</key> 1679 <key>Persist</key>
1363 <integer>1</integer> 1680 <integer>1</integer>
1364 <key>Type</key> 1681 <key>Type</key>
1365 <string>Color4</string> 1682 <string>Color4</string>
1366 <key>Value</key> 1683 <key>Value</key>
1367 <array> 1684 <array>
1368 <real>0</real> 1685 <real>0.0</real>
1369 <real>1</real> 1686 <real>1.0</real>
1370 <real>0.5</real> 1687 <real>0.5</real>
1371 <real>1</real> 1688 <real>1.0</real>
1372 </array> 1689 </array>
1373 </map> 1690 </map>
1374 <key>ColorPaletteEntry27</key> 1691 <key>ColorPaletteEntry27</key>
1375 <map> 1692 <map>
1376 <key>Comment</key> 1693 <key>Comment</key>
1377 <string>Color picker palette entry</string> 1694 <string>Color picker palette entry</string>
1378 <key>Persist</key> 1695 <key>Persist</key>
1379 <integer>1</integer> 1696 <integer>1</integer>
1380 <key>Type</key> 1697 <key>Type</key>
1381 <string>Color4</string> 1698 <string>Color4</string>
1382 <key>Value</key> 1699 <key>Value</key>
1383 <array> 1700 <array>
1384 <real>0.5</real> 1701 <real>0.5</real>
1385 <real>1</real> 1702 <real>1.0</real>
1386 <real>1</real> 1703 <real>1.0</real>
1387 <real>1</real> 1704 <real>1.0</real>
1388 </array> 1705 </array>
1389 </map> 1706 </map>
1390 <key>ColorPaletteEntry28</key> 1707 <key>ColorPaletteEntry28</key>
1391 <map> 1708 <map>
1392 <key>Comment</key> 1709 <key>Comment</key>
1393 <string>Color picker palette entry</string> 1710 <string>Color picker palette entry</string>
1394 <key>Persist</key> 1711 <key>Persist</key>
1395 <integer>1</integer> 1712 <integer>1</integer>
1396 <key>Type</key> 1713 <key>Type</key>
1397 <string>Color4</string> 1714 <string>Color4</string>
1398 <key>Value</key> 1715 <key>Value</key>
1399 <array> 1716 <array>
1400 <real>0.5</real> 1717 <real>0.5</real>
1401 <real>0.5</real> 1718 <real>0.5</real>
1402 <real>1</real> 1719 <real>1.0</real>
1403 <real>1</real> 1720 <real>1.0</real>
1404 </array> 1721 </array>
1405 </map> 1722 </map>
1406 <key>ColorPaletteEntry29</key> 1723 <key>ColorPaletteEntry29</key>
1407 <map> 1724 <map>
1408 <key>Comment</key> 1725 <key>Comment</key>
1409 <string>Color picker palette entry</string> 1726 <string>Color picker palette entry</string>
1410 <key>Persist</key> 1727 <key>Persist</key>
1411 <integer>1</integer> 1728 <integer>1</integer>
1412 <key>Type</key> 1729 <key>Type</key>
1413 <string>Color4</string> 1730 <string>Color4</string>
1414 <key>Value</key> 1731 <key>Value</key>
1415 <array> 1732 <array>
1416 <real>1</real> 1733 <real>1.0</real>
1417 <real>0</real> 1734 <real>0.0</real>
1418 <real>0.5</real> 1735 <real>0.5</real>
1419 <real>1</real> 1736 <real>1.0</real>
1420 </array> 1737 </array>
1421 </map> 1738 </map>
1422 <key>ColorPaletteEntry30</key> 1739 <key>ColorPaletteEntry30</key>
1423 <map> 1740 <map>
1424 <key>Comment</key> 1741 <key>Comment</key>
1425 <string>Color picker palette entry</string> 1742 <string>Color picker palette entry</string>
1426 <key>Persist</key> 1743 <key>Persist</key>
1427 <integer>1</integer> 1744 <integer>1</integer>
1428 <key>Type</key> 1745 <key>Type</key>
1429 <string>Color4</string> 1746 <string>Color4</string>
1430 <key>Value</key> 1747 <key>Value</key>
1431 <array> 1748 <array>
1432 <real>1</real> 1749 <real>1.0</real>
1433 <real>0.5</real> 1750 <real>0.5</real>
1434 <real>0</real> 1751 <real>0.0</real>
1435 <real>1</real> 1752 <real>1.0</real>
1436 </array> 1753 </array>
1437 </map> 1754 </map>
1438 <key>ColorPaletteEntry31</key> 1755 <key>ColorPaletteEntry31</key>
1439 <map> 1756 <map>
1440 <key>Comment</key> 1757 <key>Comment</key>
1441 <string>Color picker palette entry</string> 1758 <string>Color picker palette entry</string>
1442 <key>Persist</key> 1759 <key>Persist</key>
1443 <integer>1</integer> 1760 <integer>1</integer>
1444 <key>Type</key> 1761 <key>Type</key>
1445 <string>Color4</string> 1762 <string>Color4</string>
1446 <key>Value</key> 1763 <key>Value</key>
1447 <array> 1764 <array>
1448 <real>1</real> 1765 <real>1.0</real>
1449 <real>1</real> 1766 <real>1.0</real>
1450 <real>1</real> 1767 <real>1.0</real>
1451 <real>1</real> 1768 <real>1.0</real>
1452 </array> 1769 </array>
1453 </map> 1770 </map>
1454 <key>ColorPaletteEntry32</key> 1771 <key>ColorPaletteEntry32</key>
1455 <map> 1772 <map>
1456 <key>Comment</key> 1773 <key>Comment</key>
1457 <string>Color picker palette entry</string> 1774 <string>Color picker palette entry</string>
1458 <key>Persist</key> 1775 <key>Persist</key>
1459 <integer>1</integer> 1776 <integer>1</integer>
1460 <key>Type</key> 1777 <key>Type</key>
1461 <string>Color4</string> 1778 <string>Color4</string>
1462 <key>Value</key> 1779 <key>Value</key>
1463 <array> 1780 <array>
1464 <real>1</real> 1781 <real>1.0</real>
1465 <real>1</real> 1782 <real>1.0</real>
1466 <real>1</real> 1783 <real>1.0</real>
1467 <real>1</real> 1784 <real>1.0</real>
1468 </array> 1785 </array>
1469 </map> 1786 </map>
1470 <key>ColumnHeaderDropDownDelay</key> 1787 <key>ColumnHeaderDropDownDelay</key>
1471 <map> 1788 <map>
1472 <key>Comment</key> 1789 <key>Comment</key>
1473 <string>Time in seconds of mouse click before column header shows sort options list</string> 1790 <string>Time in seconds of mouse click before column header shows sort options list</string>
1474 <key>Persist</key> 1791 <key>Persist</key>
1475 <integer>1</integer> 1792 <integer>1</integer>
1476 <key>Type</key> 1793 <key>Type</key>
1477 <string>F32</string> 1794 <string>F32</string>
1478 <key>Value</key> 1795 <key>Value</key>
1479 <real>0.300000011920928955078125</real> 1796 <real>0.300000011921</real>
1480 </map> 1797 </map>
1481 <key>CompileOutputRect</key> 1798 <key>CompileOutputRect</key>
1482 <map> 1799 <map>
1483 <key>Comment</key> 1800 <key>Comment</key>
1484 <string>Rectangle for script Recompile Everything output window</string> 1801 <string>Rectangle for script Recompile Everything output window</string>
1485 <key>Persist</key> 1802 <key>Persist</key>
1486 <integer>1</integer> 1803 <integer>1</integer>
1487 <key>Type</key> 1804 <key>Type</key>
1488 <string>Rect</string> 1805 <string>Rect</string>
1489 <key>Value</key> 1806 <key>Value</key>
1490 <array> 1807 <array>
1491 <integer>0</integer> 1808 <integer>0</integer>
1492 <integer>400</integer> 1809 <integer>400</integer>
1493 <integer>300</integer> 1810 <integer>300</integer>
1494 <integer>0</integer> 1811 <integer>0</integer>
1495 </array> 1812 </array>
1496 </map> 1813 </map>
1497 <key>CompressSnapshotsToDisk</key> 1814 <key>CompressSnapshotsToDisk</key>
1498 <map> 1815 <map>
1499 <key>Comment</key> 1816 <key>Comment</key>
1500 <string>Compress snapshots saved to disk (Using JPEG 2000)</string> 1817 <string>Compress snapshots saved to disk (Using JPEG 2000)</string>
1501 <key>Persist</key> 1818 <key>Persist</key>
1502 <integer>1</integer> 1819 <integer>1</integer>
1503 <key>Type</key> 1820 <key>Type</key>
1504 <string>Boolean</string> 1821 <string>Boolean</string>
1505 <key>Value</key> 1822 <key>Value</key>
1506 <integer>0</integer> 1823 <integer>0</integer>
1507 </map> 1824 </map>
1508 <key>ConnectAsGod</key> 1825 <key>ConnectAsGod</key>
1509 <map> 1826 <map>
1510 <key>Comment</key> 1827 <key>Comment</key>
1511 <string>Log in a god if you have god access.</string> 1828 <string>Log in a god if you have god access.</string>
1512 <key>Persist</key> 1829 <key>Persist</key>
1513 <integer>1</integer> 1830 <integer>1</integer>
1514 <key>Type</key> 1831 <key>Type</key>
1515 <string>Boolean</string> 1832 <string>Boolean</string>
1516 <key>Value</key> 1833 <key>Value</key>
1517 <integer>0</integer> 1834 <integer>0</integer>
1518 </map> 1835 </map>
1519 <key>ConnectionPort</key> 1836 <key>ConnectionPort</key>
1520 <map> 1837 <map>
1521 <key>Comment</key> 1838 <key>Comment</key>
1522 <string>Custom connection port number</string> 1839 <string>Custom connection port number</string>
1523 <key>Persist</key> 1840 <key>Persist</key>
1524 <integer>1</integer> 1841 <integer>1</integer>
1525 <key>Type</key> 1842 <key>Type</key>
1526 <string>U32</string> 1843 <string>U32</string>
1527 <key>Value</key> 1844 <key>Value</key>
1528 <integer>13000</integer> 1845 <integer>13000</integer>
1529 </map> 1846 </map>
1530 <key>ConnectionPortEnabled</key> 1847 <key>ConnectionPortEnabled</key>
1531 <map> 1848 <map>
1532 <key>Comment</key> 1849 <key>Comment</key>
1533 <string>Use the custom connection port?</string> 1850 <string>Use the custom connection port?</string>
1534 <key>Persist</key> 1851 <key>Persist</key>
1535 <integer>1</integer> 1852 <integer>1</integer>
1536 <key>Type</key> 1853 <key>Type</key>
1537 <string>Boolean</string> 1854 <string>Boolean</string>
1538 <key>Value</key> 1855 <key>Value</key>
1539 <integer>0</integer> 1856 <integer>0</integer>
1540 </map> 1857 </map>
1541 <key>ConsoleBackgroundOpacity</key> 1858 <key>ConsoleBackgroundOpacity</key>
1542 <map> 1859 <map>
1543 <key>Comment</key> 1860 <key>Comment</key>
1544 <string>Opacity of chat console (0.0 = completely transparent, 1.0 = completely opaque)</string> 1861 <string>Opacity of chat console (0.0 = completely transparent, 1.0 = completely opaque)</string>
1545 <key>Persist</key> 1862 <key>Persist</key>
1546 <integer>1</integer> 1863 <integer>1</integer>
1547 <key>Type</key> 1864 <key>Type</key>
1548 <string>F32</string> 1865 <string>F32</string>
1549 <key>Value</key> 1866 <key>Value</key>
1550 <real>0.4000000059604644775390625</real> 1867 <real>0.40000000596</real>
1551 </map> 1868 </map>
1552 <key>ConsoleBufferSize</key> 1869 <key>ConsoleBufferSize</key>
1553 <map> 1870 <map>
1554 <key>Comment</key> 1871 <key>Comment</key>
1555 <string>Size of chat console history (lines of chat)</string> 1872 <string>Size of chat console history (lines of chat)</string>
1556 <key>Persist</key> 1873 <key>Persist</key>
1557 <integer>1</integer> 1874 <integer>1</integer>
1558 <key>Type</key> 1875 <key>Type</key>
1559 <string>S32</string> 1876 <string>S32</string>
1560 <key>Value</key> 1877 <key>Value</key>
1561 <integer>40</integer> 1878 <integer>40</integer>
1562 </map> 1879 </map>
1563 <key>ConsoleMaxLines</key> 1880 <key>ConsoleMaxLines</key>
1564 <map> 1881 <map>
1565 <key>Comment</key> 1882 <key>Comment</key>
1566 <string>Max number of lines of chat text visible in console.</string> 1883 <string>Max number of lines of chat text visible in console.</string>
1567 <key>Persist</key> 1884 <key>Persist</key>
1568 <integer>1</integer> 1885 <integer>1</integer>
1569 <key>Type</key> 1886 <key>Type</key>
1570 <string>S32</string> 1887 <string>S32</string>
1571 <key>Value</key> 1888 <key>Value</key>
1572 <integer>40</integer> 1889 <integer>40</integer>
1573 </map> 1890 </map>
1574 <key>ContactsTornOff</key> 1891 <key>ContactsTornOff</key>
1575 <map> 1892 <map>
1576 <key>Comment</key> 1893 <key>Comment</key>
1577 <string>Show contacts window separately from Communicate window.</string> 1894 <string>Show contacts window separately from Communicate window.</string>
1578 <key>Persist</key> 1895 <key>Persist</key>
1579 <integer>1</integer> 1896 <integer>1</integer>
1580 <key>Type</key> 1897 <key>Type</key>
1581 <string>Boolean</string> 1898 <string>Boolean</string>
1582 <key>Value</key> 1899 <key>Value</key>
1583 <integer>0</integer> 1900 <integer>0</integer>
1584 </map> 1901 </map>
1585 <key>CookiesEnabled</key> 1902 <key>CookiesEnabled</key>
1586 <map> 1903 <map>
1587 <key>Comment</key> 1904 <key>Comment</key>
1588 <string>Accept cookies from Web sites?</string> 1905 <string>Accept cookies from Web sites?</string>
1589 <key>Persist</key> 1906 <key>Persist</key>
1590 <integer>1</integer> 1907 <integer>1</integer>
1591 <key>Type</key> 1908 <key>Type</key>
1592 <string>Boolean</string> 1909 <string>Boolean</string>
1593 <key>Value</key> 1910 <key>Value</key>
1594 <integer>1</integer> 1911 <integer>1</integer>
1595 </map> 1912 </map>
1596 <key>CrashLogBehavior</key> 1913 <key>CrashLogBehavior</key>
1597 <map> 1914 <map>
1598 <key>Comment</key> 1915 <key>Comment</key>
1599 <string>Controls behavior when viewer (0 = ask before sending crash report, 1 = always send crash report, 2 = never send crash report)</string> 1916 <string>Controls behavior when viewer (0 = ask before sending crash report, 1 = always send crash report, 2 = never send crash report)</string>
1600 <key>Persist</key> 1917 <key>Persist</key>
1601 <integer>0</integer> 1918 <integer>0</integer>
1602 <key>Type</key> 1919 <key>Type</key>
1603 <string>S32</string> 1920 <string>S32</string>
1604 <key>Value</key> 1921 <key>Value</key>
1605 <integer>1</integer> 1922 <integer>1</integer>
1606 </map> 1923 </map>
1607 <key>CreateToolCopyCenters</key> 1924 <key>CreateToolCopyCenters</key>
1608 <map> 1925 <map>
1609 <key>Comment</key> 1926 <key>Comment</key>
1610 <string /> 1927 <string />
1611 <key>Persist</key> 1928 <key>Persist</key>
1612 <integer>0</integer> 1929 <integer>0</integer>
1613 <key>Type</key> 1930 <key>Type</key>
1614 <string>Boolean</string> 1931 <string>Boolean</string>
1615 <key>Value</key> 1932 <key>Value</key>
1616 <integer>1</integer> 1933 <integer>1</integer>
1617 </map> 1934 </map>
1618 <key>CreateToolCopyRotates</key> 1935 <key>CreateToolCopyRotates</key>
1619 <map> 1936 <map>
1620 <key>Comment</key> 1937 <key>Comment</key>
1621 <string /> 1938 <string />
1622 <key>Persist</key> 1939 <key>Persist</key>
1623 <integer>0</integer> 1940 <integer>0</integer>
1624 <key>Type</key> 1941 <key>Type</key>
1625 <string>Boolean</string> 1942 <string>Boolean</string>
1626 <key>Value</key> 1943 <key>Value</key>
1627 <integer>0</integer> 1944 <integer>0</integer>
1628 </map> 1945 </map>
1629 <key>CreateToolCopySelection</key> 1946 <key>CreateToolCopySelection</key>
1630 <map> 1947 <map>
1631 <key>Comment</key> 1948 <key>Comment</key>
1632 <string /> 1949 <string />
1633 <key>Persist</key> 1950 <key>Persist</key>
1634 <integer>0</integer> 1951 <integer>0</integer>
1635 <key>Type</key> 1952 <key>Type</key>
1636 <string>Boolean</string> 1953 <string>Boolean</string>
1637 <key>Value</key> 1954 <key>Value</key>
1638 <integer>0</integer> 1955 <integer>0</integer>
1639 </map> 1956 </map>
1640 <key>CreateToolKeepSelected</key> 1957 <key>CreateToolKeepSelected</key>
1641 <map> 1958 <map>
1642 <key>Comment</key> 1959 <key>Comment</key>
1643 <string>After using create tool, keep the create tool active</string> 1960 <string>After using create tool, keep the create tool active</string>
1644 <key>Persist</key> 1961 <key>Persist</key>
1645 <integer>1</integer> 1962 <integer>1</integer>
1646 <key>Type</key> 1963 <key>Type</key>
1647 <string>Boolean</string> 1964 <string>Boolean</string>
1648 <key>Value</key> 1965 <key>Value</key>
1649 <integer>0</integer> 1966 <integer>0</integer>
1650 </map> 1967 </map>
1968 <key>Cursor3D</key>
1969 <map>
1970 <key>Comment</key>
1971 <string>Tread Joystick values as absolute positions (not deltas).</string>
1972 <key>Persist</key>
1973 <integer>1</integer>
1974 <key>Type</key>
1975 <string>Boolean</string>
1976 <key>Value</key>
1977 <integer>1</integer>
1978 </map>
1651 <key>CustomServer</key> 1979 <key>CustomServer</key>
1652 <map> 1980 <map>
1653 <key>Comment</key> 1981 <key>Comment</key>
1654 <string>Specifies IP address or hostname of grid to which you connect</string> 1982 <string>Specifies IP address or hostname of grid to which you connect</string>
1655 <key>Persist</key> 1983 <key>Persist</key>
1656 <integer>1</integer> 1984 <integer>1</integer>
1657 <key>Type</key> 1985 <key>Type</key>
1658 <string>String</string> 1986 <string>String</string>
1659 <key>Value</key> 1987 <key>Value</key>
1660 <string /> 1988 <string />
1661 </map> 1989 </map>
1662 <key>DebugBeaconLineWidth</key> 1990 <key>DebugBeaconLineWidth</key>
1663 <map> 1991 <map>
1664 <key>Comment</key> 1992 <key>Comment</key>
1665 <string>Size of lines for Debug Beacons</string> 1993 <string>Size of lines for Debug Beacons</string>
1666 <key>Persist</key> 1994 <key>Persist</key>
1667 <integer>1</integer> 1995 <integer>1</integer>
1668 <key>Type</key> 1996 <key>Type</key>
1669 <string>S32</string> 1997 <string>S32</string>
1670 <key>Value</key> 1998 <key>Value</key>
1671 <integer>1</integer> 1999 <integer>1</integer>
1672 </map> 2000 </map>
1673 <key>DebugInventoryFilters</key> 2001 <key>DebugInventoryFilters</key>
1674 <map> 2002 <map>
1675 <key>Comment</key> 2003 <key>Comment</key>
1676 <string>Turn on debugging display for inventory filtering</string> 2004 <string>Turn on debugging display for inventory filtering</string>
1677 <key>Persist</key> 2005 <key>Persist</key>
1678 <integer>1</integer> 2006 <integer>1</integer>
1679 <key>Type</key> 2007 <key>Type</key>
1680 <string>Boolean</string> 2008 <string>Boolean</string>
1681 <key>Value</key> 2009 <key>Value</key>
1682 <integer>0</integer> 2010 <integer>0</integer>
1683 </map> 2011 </map>
1684 <key>DebugPermissions</key> 2012 <key>DebugPermissions</key>
1685 <map> 2013 <map>
1686 <key>Comment</key> 2014 <key>Comment</key>
1687 <string>Log permissions for selected inventory items</string> 2015 <string>Log permissions for selected inventory items</string>
1688 <key>Persist</key> 2016 <key>Persist</key>
1689 <integer>1</integer> 2017 <integer>1</integer>
1690 <key>Type</key> 2018 <key>Type</key>
1691 <string>Boolean</string> 2019 <string>Boolean</string>
1692 <key>Value</key> 2020 <key>Value</key>
1693 <integer>0</integer> 2021 <integer>0</integer>
1694 </map> 2022 </map>
1695 <key>DebugShowColor</key> 2023 <key>DebugShowColor</key>
1696 <map> 2024 <map>
1697 <key>Comment</key> 2025 <key>Comment</key>
1698 <string>Show color under cursor</string> 2026 <string>Show color under cursor</string>
1699 <key>Persist</key> 2027 <key>Persist</key>
1700 <integer>1</integer> 2028 <integer>1</integer>
1701 <key>Type</key> 2029 <key>Type</key>
1702 <string>Boolean</string> 2030 <string>Boolean</string>
1703 <key>Value</key> 2031 <key>Value</key>
1704 <integer>0</integer> 2032 <integer>0</integer>
1705 </map> 2033 </map>
1706 <key>DebugShowRenderInfo</key> 2034 <key>DebugShowRenderInfo</key>
1707 <map> 2035 <map>
1708 <key>Comment</key> 2036 <key>Comment</key>
1709 <string>Show depth buffer contents</string> 2037 <string>Show depth buffer contents</string>
1710 <key>Persist</key> 2038 <key>Persist</key>
1711 <integer>1</integer> 2039 <integer>1</integer>
1712 <key>Type</key> 2040 <key>Type</key>
1713 <string>Boolean</string> 2041 <string>Boolean</string>
1714 <key>Value</key> 2042 <key>Value</key>
1715 <integer>0</integer> 2043 <integer>0</integer>
1716 </map> 2044 </map>
1717 <key>DebugShowTime</key> 2045 <key>DebugShowTime</key>
1718 <map> 2046 <map>
1719 <key>Comment</key> 2047 <key>Comment</key>
1720 <string>Show depth buffer contents</string> 2048 <string>Show depth buffer contents</string>
1721 <key>Persist</key> 2049 <key>Persist</key>
1722 <integer>1</integer> 2050 <integer>1</integer>
1723 <key>Type</key> 2051 <key>Type</key>
1724 <string>Boolean</string> 2052 <string>Boolean</string>
1725 <key>Value</key> 2053 <key>Value</key>
1726 <integer>0</integer> 2054 <integer>0</integer>
1727 </map> 2055 </map>
1728 <key>DebugViews</key> 2056 <key>DebugViews</key>
1729 <map> 2057 <map>
1730 <key>Comment</key> 2058 <key>Comment</key>
1731 <string>Display debugging info for views.</string> 2059 <string>Display debugging info for views.</string>
1732 <key>Persist</key> 2060 <key>Persist</key>
1733 <integer>1</integer> 2061 <integer>1</integer>
1734 <key>Type</key> 2062 <key>Type</key>
1735 <string>Boolean</string> 2063 <string>Boolean</string>
1736 <key>Value</key> 2064 <key>Value</key>
1737 <integer>0</integer> 2065 <integer>0</integer>
1738 </map> 2066 </map>
1739 <key>DebugWindowProc</key> 2067 <key>DebugWindowProc</key>
1740 <map> 2068 <map>
1741 <key>Comment</key> 2069 <key>Comment</key>
1742 <string>Log windows messages</string> 2070 <string>Log windows messages</string>
1743 <key>Persist</key> 2071 <key>Persist</key>
1744 <integer>1</integer> 2072 <integer>1</integer>
1745 <key>Type</key> 2073 <key>Type</key>
1746 <string>Boolean</string> 2074 <string>Boolean</string>
1747 <key>Value</key> 2075 <key>Value</key>
1748 <integer>0</integer> 2076 <integer>0</integer>
1749 </map> 2077 </map>
1750 <key>DefaultObjectTexture</key> 2078 <key>DefaultObjectTexture</key>
1751 <map> 2079 <map>
1752 <key>Comment</key> 2080 <key>Comment</key>
1753 <string>Texture used as &apos;Default&apos; in texture picker. (UUID texture reference)</string> 2081 <string>Texture used as 'Default' in texture picker. (UUID texture reference)</string>
1754 <key>Persist</key> 2082 <key>Persist</key>
1755 <integer>1</integer> 2083 <integer>1</integer>
1756 <key>Type</key> 2084 <key>Type</key>
1757 <string>String</string> 2085 <string>String</string>
1758 <key>Value</key> 2086 <key>Value</key>
1759 <string>89556747-24cb-43ed-920b-47caed15465f</string> 2087 <string>89556747-24cb-43ed-920b-47caed15465f</string>
1760 </map> 2088 </map>
1761 <key>DisableCameraConstraints</key> 2089 <key>DisableCameraConstraints</key>
1762 <map> 2090 <map>
1763 <key>Comment</key> 2091 <key>Comment</key>
1764 <string>Disable the normal bounds put on the camera by avatar position</string> 2092 <string>Disable the normal bounds put on the camera by avatar position</string>
1765 <key>Persist</key> 2093 <key>Persist</key>
1766 <integer>1</integer> 2094 <integer>1</integer>
1767 <key>Type</key> 2095 <key>Type</key>
1768 <string>Boolean</string> 2096 <string>Boolean</string>
1769 <key>Value</key> 2097 <key>Value</key>
1770 <integer>0</integer> 2098 <integer>0</integer>
1771 </map> 2099 </map>
1772 <key>DisableRendering</key> 2100 <key>DisableRendering</key>
1773 <map> 2101 <map>
1774 <key>Comment</key> 2102 <key>Comment</key>
1775 <string>Disable GL rendering and GUI (load testing)</string> 2103 <string>Disable GL rendering and GUI (load testing)</string>
1776 <key>Persist</key> 2104 <key>Persist</key>
1777 <integer>1</integer> 2105 <integer>1</integer>
1778 <key>Type</key> 2106 <key>Type</key>
1779 <string>Boolean</string> 2107 <string>Boolean</string>
1780 <key>Value</key> 2108 <key>Value</key>
1781 <integer>0</integer> 2109 <integer>0</integer>
1782 </map> 2110 </map>
1783 <key>DisableVerticalSync</key> 2111 <key>DisableVerticalSync</key>
1784 <map> 2112 <map>
1785 <key>Comment</key> 2113 <key>Comment</key>
1786 <string>Update frames as fast as possible (FALSE = update frames between display scans)</string> 2114 <string>Update frames as fast as possible (FALSE = update frames between display scans)</string>
1787 <key>Persist</key> 2115 <key>Persist</key>
1788 <integer>1</integer> 2116 <integer>1</integer>
1789 <key>Type</key> 2117 <key>Type</key>
1790 <string>Boolean</string> 2118 <string>Boolean</string>
1791 <key>Value</key> 2119 <key>Value</key>
1792 <integer>1</integer> 2120 <integer>1</integer>
1793 </map> 2121 </map>
1794 <key>DisplayAvatarAgentTarget</key> 2122 <key>DisplayAvatarAgentTarget</key>
1795 <map> 2123 <map>
1796 <key>Comment</key> 2124 <key>Comment</key>
1797 <string>Show avatar positioning locators (animation debug)</string> 2125 <string>Show avatar positioning locators (animation debug)</string>
1798 <key>Persist</key> 2126 <key>Persist</key>
1799 <integer>1</integer> 2127 <integer>1</integer>
1800 <key>Type</key> 2128 <key>Type</key>
1801 <string>Boolean</string> 2129 <string>Boolean</string>
1802 <key>Value</key> 2130 <key>Value</key>
1803 <integer>0</integer> 2131 <integer>0</integer>
1804 </map> 2132 </map>
1805 <key>DisplayChat</key> 2133 <key>DisplayChat</key>
1806 <map> 2134 <map>
1807 <key>Comment</key> 2135 <key>Comment</key>
1808 <string>Display Latest Chat message on LCD</string> 2136 <string>Display Latest Chat message on LCD</string>
1809 <key>Persist</key> 2137 <key>Persist</key>
1810 <integer>1</integer> 2138 <integer>1</integer>
1811 <key>Type</key> 2139 <key>Type</key>
1812 <string>Boolean</string> 2140 <string>Boolean</string>
1813 <key>Value</key> 2141 <key>Value</key>
1814 <integer>1</integer> 2142 <integer>1</integer>
1815 </map> 2143 </map>
1816 <key>DisplayDebug</key> 2144 <key>DisplayDebug</key>
1817 <map> 2145 <map>
1818 <key>Comment</key> 2146 <key>Comment</key>
1819 <string>Display Network Information on LCD</string> 2147 <string>Display Network Information on LCD</string>
1820 <key>Persist</key> 2148 <key>Persist</key>
1821 <integer>1</integer> 2149 <integer>1</integer>
1822 <key>Type</key> 2150 <key>Type</key>
1823 <string>Boolean</string> 2151 <string>Boolean</string>
1824 <key>Value</key> 2152 <key>Value</key>
1825 <integer>1</integer> 2153 <integer>1</integer>
1826 </map> 2154 </map>
1827 <key>DisplayDebugConsole</key> 2155 <key>DisplayDebugConsole</key>
1828 <map> 2156 <map>
1829 <key>Comment</key> 2157 <key>Comment</key>
1830 <string>Display Console Debug Information on LCD</string> 2158 <string>Display Console Debug Information on LCD</string>
1831 <key>Persist</key> 2159 <key>Persist</key>
1832 <integer>1</integer> 2160 <integer>1</integer>
1833 <key>Type</key> 2161 <key>Type</key>
1834 <string>Boolean</string> 2162 <string>Boolean</string>
1835 <key>Value</key> 2163 <key>Value</key>
1836 <integer>1</integer> 2164 <integer>1</integer>
1837 </map> 2165 </map>
1838 <key>DisplayIM</key> 2166 <key>DisplayIM</key>
1839 <map> 2167 <map>
1840 <key>Comment</key> 2168 <key>Comment</key>
1841 <string>Display Latest IM message on LCD</string> 2169 <string>Display Latest IM message on LCD</string>
1842 <key>Persist</key> 2170 <key>Persist</key>
1843 <integer>1</integer> 2171 <integer>1</integer>
1844 <key>Type</key> 2172 <key>Type</key>
1845 <string>Boolean</string> 2173 <string>Boolean</string>
1846 <key>Value</key> 2174 <key>Value</key>
1847 <integer>1</integer> 2175 <integer>1</integer>
1848 </map> 2176 </map>
1849 <key>DisplayLinden</key> 2177 <key>DisplayLinden</key>
1850 <map> 2178 <map>
1851 <key>Comment</key> 2179 <key>Comment</key>
1852 <string>Display Account Information on LCD</string> 2180 <string>Display Account Information on LCD</string>
1853 <key>Persist</key> 2181 <key>Persist</key>
1854 <integer>1</integer> 2182 <integer>1</integer>
1855 <key>Type</key> 2183 <key>Type</key>
1856 <string>Boolean</string> 2184 <string>Boolean</string>
1857 <key>Value</key> 2185 <key>Value</key>
1858 <integer>1</integer> 2186 <integer>1</integer>
1859 </map> 2187 </map>
1860 <key>DisplayRegion</key> 2188 <key>DisplayRegion</key>
1861 <map> 2189 <map>
1862 <key>Comment</key> 2190 <key>Comment</key>
1863 <string>Display Location information on LCD</string> 2191 <string>Display Location information on LCD</string>
1864 <key>Persist</key> 2192 <key>Persist</key>
1865 <integer>1</integer> 2193 <integer>1</integer>
1866 <key>Type</key> 2194 <key>Type</key>
1867 <string>Boolean</string> 2195 <string>Boolean</string>
1868 <key>Value</key> 2196 <key>Value</key>
1869 <integer>1</integer> 2197 <integer>1</integer>
1870 </map> 2198 </map>
1871 <key>DisplayTimecode</key> 2199 <key>DisplayTimecode</key>
1872 <map> 2200 <map>
1873 <key>Comment</key> 2201 <key>Comment</key>
1874 <string>Display timecode on screen</string> 2202 <string>Display timecode on screen</string>
1875 <key>Persist</key> 2203 <key>Persist</key>
1876 <integer>1</integer> 2204 <integer>1</integer>
1877 <key>Type</key> 2205 <key>Type</key>
1878 <string>Boolean</string> 2206 <string>Boolean</string>
1879 <key>Value</key> 2207 <key>Value</key>
1880 <integer>0</integer> 2208 <integer>0</integer>
1881 </map> 2209 </map>
1882 <key>Disregard128DefaultDrawDistance</key> 2210 <key>Disregard128DefaultDrawDistance</key>
1883 <map> 2211 <map>
1884 <key>Comment</key> 2212 <key>Comment</key>
1885 <string>Whether to use the auto default to 128 draw distance</string> 2213 <string>Whether to use the auto default to 128 draw distance</string>
1886 <key>Persist</key> 2214 <key>Persist</key>
1887 <integer>1</integer> 2215 <integer>1</integer>
1888 <key>Type</key> 2216 <key>Type</key>
1889 <string>Boolean</string> 2217 <string>Boolean</string>
1890 <key>Value</key> 2218 <key>Value</key>
1891 <integer>1</integer> 2219 <real>1.0</real>
1892 </map> 2220 </map>
1893 <key>Disregard96DefaultDrawDistance</key> 2221 <key>Disregard96DefaultDrawDistance</key>
1894 <map> 2222 <map>
1895 <key>Comment</key> 2223 <key>Comment</key>
1896 <string>Whether to use the auto default to 96 draw distance</string> 2224 <string>Whether to use the auto default to 96 draw distance</string>
1897 <key>Persist</key> 2225 <key>Persist</key>
1898 <integer>1</integer> 2226 <integer>1</integer>
1899 <key>Type</key> 2227 <key>Type</key>
1900 <string>Boolean</string> 2228 <string>Boolean</string>
1901 <key>Value</key> 2229 <key>Value</key>
1902 <integer>1</integer> 2230 <real>1.0</real>
1903 </map> 2231 </map>
1904 <key>DoubleClickAutoPilot</key> 2232 <key>DoubleClickAutoPilot</key>
1905 <map> 2233 <map>
1906 <key>Comment</key> 2234 <key>Comment</key>
1907 <string>Enable double-click auto pilot</string> 2235 <string>Enable double-click auto pilot</string>
1908 <key>Persist</key> 2236 <key>Persist</key>
1909 <integer>1</integer> 2237 <integer>1</integer>
1910 <key>Type</key> 2238 <key>Type</key>
1911 <string>Boolean</string> 2239 <string>Boolean</string>
1912 <key>Value</key> 2240 <key>Value</key>
1913 <integer>0</integer> 2241 <integer>0</integer>
1914 </map> 2242 </map>
1915 <key>DragAndDropToolTipDelay</key> 2243 <key>DragAndDropToolTipDelay</key>
1916 <map> 2244 <map>
1917 <key>Comment</key> 2245 <key>Comment</key>
1918 <string>Seconds before displaying tooltip when performing drag and drop operation</string> 2246 <string>Seconds before displaying tooltip when performing drag and drop operation</string>
1919 <key>Persist</key> 2247 <key>Persist</key>
1920 <integer>1</integer> 2248 <integer>1</integer>
1921 <key>Type</key> 2249 <key>Type</key>
1922 <string>F32</string> 2250 <string>F32</string>
1923 <key>Value</key> 2251 <key>Value</key>
1924 <real>0.1000000014901161193847656</real> 2252 <real>0.10000000149</real>
1925 </map> 2253 </map>
1926 <key>DropShadowButton</key> 2254 <key>DropShadowButton</key>
1927 <map> 2255 <map>
1928 <key>Comment</key> 2256 <key>Comment</key>
1929 <string>Drop shadow width for buttons (pixels)</string> 2257 <string>Drop shadow width for buttons (pixels)</string>
1930 <key>Persist</key> 2258 <key>Persist</key>
1931 <integer>1</integer> 2259 <integer>1</integer>
1932 <key>Type</key> 2260 <key>Type</key>
1933 <string>S32</string> 2261 <string>S32</string>
1934 <key>Value</key> 2262 <key>Value</key>
1935 <integer>2</integer> 2263 <integer>2</integer>
1936 </map> 2264 </map>
1937 <key>DropShadowFloater</key> 2265 <key>DropShadowFloater</key>
1938 <map> 2266 <map>
1939 <key>Comment</key> 2267 <key>Comment</key>
1940 <string>Drop shadow width for floaters (pixels)</string> 2268 <string>Drop shadow width for floaters (pixels)</string>
1941 <key>Persist</key> 2269 <key>Persist</key>
1942 <integer>1</integer> 2270 <integer>1</integer>
1943 <key>Type</key> 2271 <key>Type</key>
1944 <string>S32</string> 2272 <string>S32</string>
1945 <key>Value</key> 2273 <key>Value</key>
1946 <integer>5</integer> 2274 <integer>5</integer>
1947 </map> 2275 </map>
1948 <key>DropShadowSlider</key> 2276 <key>DropShadowSlider</key>
1949 <map> 2277 <map>
1950 <key>Comment</key> 2278 <key>Comment</key>
1951 <string>Drop shadow width for sliders (pixels)</string> 2279 <string>Drop shadow width for sliders (pixels)</string>
1952 <key>Persist</key> 2280 <key>Persist</key>
1953 <integer>1</integer> 2281 <integer>1</integer>
1954 <key>Type</key> 2282 <key>Type</key>
1955 <string>S32</string> 2283 <string>S32</string>
1956 <key>Value</key> 2284 <key>Value</key>
1957 <integer>3</integer> 2285 <integer>3</integer>
1958 </map> 2286 </map>
1959 <key>DropShadowTooltip</key> 2287 <key>DropShadowTooltip</key>
1960 <map> 2288 <map>
1961 <key>Comment</key> 2289 <key>Comment</key>
1962 <string>Drop shadow width for tooltips (pixels)</string> 2290 <string>Drop shadow width for tooltips (pixels)</string>
1963 <key>Persist</key> 2291 <key>Persist</key>
1964 <integer>1</integer> 2292 <integer>1</integer>
1965 <key>Type</key> 2293 <key>Type</key>
1966 <string>S32</string> 2294 <string>S32</string>
1967 <key>Value</key> 2295 <key>Value</key>
1968 <integer>4</integer> 2296 <integer>4</integer>
1969 </map> 2297 </map>
1970 <key>DynamicCameraStrength</key> 2298 <key>DynamicCameraStrength</key>
1971 <map> 2299 <map>
1972 <key>Comment</key> 2300 <key>Comment</key>
1973 <string>Amount camera lags behind avatar motion (0 = none, 30 = avatar velocity)</string> 2301 <string>Amount camera lags behind avatar motion (0 = none, 30 = avatar velocity)</string>
1974 <key>Persist</key> 2302 <key>Persist</key>
1975 <integer>1</integer> 2303 <integer>1</integer>
1976 <key>Type</key> 2304 <key>Type</key>
1977 <string>F32</string> 2305 <string>F32</string>
1978 <key>Value</key> 2306 <key>Value</key>
1979 <real>2</real> 2307 <real>2.0</real>
1980 </map> 2308 </map>
1981 <key>EditCameraMovement</key> 2309 <key>EditCameraMovement</key>
1982 <map> 2310 <map>
1983 <key>Comment</key> 2311 <key>Comment</key>
1984 <string>When entering build mode, camera moves up above avatar</string> 2312 <string>When entering build mode, camera moves up above avatar</string>
1985 <key>Persist</key> 2313 <key>Persist</key>
1986 <integer>1</integer> 2314 <integer>1</integer>
1987 <key>Type</key> 2315 <key>Type</key>
1988 <string>Boolean</string> 2316 <string>Boolean</string>
1989 <key>Value</key> 2317 <key>Value</key>
1990 <integer>0</integer> 2318 <integer>0</integer>
1991 </map> 2319 </map>
1992 <key>EditLinkedParts</key> 2320 <key>EditLinkedParts</key>
1993 <map> 2321 <map>
1994 <key>Comment</key> 2322 <key>Comment</key>
1995 <string>Select individual parts of linked objects</string> 2323 <string>Select individual parts of linked objects</string>
1996 <key>Persist</key> 2324 <key>Persist</key>
1997 <integer>0</integer> 2325 <integer>0</integer>
1998 <key>Type</key> 2326 <key>Type</key>
1999 <string>Boolean</string> 2327 <string>Boolean</string>
2000 <key>Value</key> 2328 <key>Value</key>
2001 <integer>0</integer> 2329 <integer>0</integer>
2002 </map> 2330 </map>
2003 <key>EffectColor</key> 2331 <key>EffectColor</key>
2004 <map> 2332 <map>
2005 <key>Comment</key> 2333 <key>Comment</key>
2006 <string>Particle effects color</string> 2334 <string>Particle effects color</string>
2007 <key>Persist</key> 2335 <key>Persist</key>
2008 <integer>1</integer> 2336 <integer>1</integer>
2009 <key>Type</key> 2337 <key>Type</key>
2010 <string>Color4</string> 2338 <string>Color4</string>
2011 <key>Value</key> 2339 <key>Value</key>
2012 <array> 2340 <array>
2013 <real>1</real> 2341 <real>1.0</real>
2014 <real>1</real> 2342 <real>1.0</real>
2015 <real>1</real> 2343 <real>1.0</real>
2016 <real>1</real> 2344 <real>1.0</real>
2017 </array> 2345 </array>
2018 </map> 2346 </map>
2019 <key>EnablePushToTalk</key> 2347 <key>EnablePushToTalk</key>
2020 <map> 2348 <map>
2021 <key>Comment</key> 2349 <key>Comment</key>
2022 <string>Must hold down a key or moouse button when talking into your microphone</string> 2350 <string>Must hold down a key or moouse button when talking into your microphone</string>
2023 <key>Persist</key> 2351 <key>Persist</key>
2024 <integer>1</integer> 2352 <integer>1</integer>
2025 <key>Type</key> 2353 <key>Type</key>
2026 <string>Boolean</string> 2354 <string>Boolean</string>
2027 <key>Value</key> 2355 <key>Value</key>
2028 <integer>1</integer> 2356 <integer>1</integer>
2029 </map> 2357 </map>
2358 <key>EnableRippleWater</key>
2359 <map>
2360 <key>Comment</key>
2361 <string>Whether to use ripple water shader or not</string>
2362 <key>Persist</key>
2363 <integer>1</integer>
2364 <key>Type</key>
2365 <string>Boolean</string>
2366 <key>Value</key>
2367 <integer>1</integer>
2368 </map>
2030 <key>EnableVoiceChat</key> 2369 <key>EnableVoiceChat</key>
2031 <map> 2370 <map>
2032 <key>Comment</key> 2371 <key>Comment</key>
2033 <string>Enable talking to other residents with a microphone</string> 2372 <string>Enable talking to other residents with a microphone</string>
2034 <key>Persist</key> 2373 <key>Persist</key>
2035 <integer>1</integer> 2374 <integer>1</integer>
2036 <key>Type</key> 2375 <key>Type</key>
2037 <string>Boolean</string> 2376 <string>Boolean</string>
2038 <key>Value</key> 2377 <key>Value</key>
2039 <integer>1</integer> 2378 <integer>1</integer>
2040 </map> 2379 </map>
2041 <key>EnergyFromTop</key> 2380 <key>EnergyFromTop</key>
2042 <map> 2381 <map>
2043 <key>Comment</key> 2382 <key>Comment</key>
2044 <string /> 2383 <string />
2045 <key>Persist</key> 2384 <key>Persist</key>
2046 <integer>0</integer> 2385 <integer>0</integer>
2047 <key>Type</key> 2386 <key>Type</key>
2048 <string>S32</string> 2387 <string>S32</string>
2049 <key>Value</key> 2388 <key>Value</key>
2050 <integer>20</integer> 2389 <integer>20</integer>
2051 </map> 2390 </map>
2052 <key>EnergyHeight</key> 2391 <key>EnergyHeight</key>
2053 <map> 2392 <map>
2054 <key>Comment</key> 2393 <key>Comment</key>
2055 <string /> 2394 <string />
2056 <key>Persist</key> 2395 <key>Persist</key>
2057 <integer>0</integer> 2396 <integer>0</integer>
2058 <key>Type</key> 2397 <key>Type</key>
2059 <string>S32</string> 2398 <string>S32</string>
2060 <key>Value</key> 2399 <key>Value</key>
2061 <integer>40</integer> 2400 <integer>40</integer>
2062 </map> 2401 </map>
2063 <key>EnergyWidth</key> 2402 <key>EnergyWidth</key>
2064 <map> 2403 <map>
2065 <key>Comment</key> 2404 <key>Comment</key>
2066 <string /> 2405 <string />
2067 <key>Persist</key> 2406 <key>Persist</key>
2068 <integer>0</integer> 2407 <integer>0</integer>
2069 <key>Type</key> 2408 <key>Type</key>
2070 <string>S32</string> 2409 <string>S32</string>
2071 <key>Value</key> 2410 <key>Value</key>
2072 <integer>175</integer> 2411 <integer>175</integer>
2073 </map> 2412 </map>
2413 <key>FPSLogFrequency</key>
2414 <map>
2415 <key>Comment</key>
2416 <string>Seconds between display of FPS in log (0 for never)</string>
2417 <key>Persist</key>
2418 <integer>1</integer>
2419 <key>Type</key>
2420 <string>F32</string>
2421 <key>Value</key>
2422 <real>10.0</real>
2423 </map>
2074 <key>FilterItemsPerFrame</key> 2424 <key>FilterItemsPerFrame</key>
2075 <map> 2425 <map>
2076 <key>Comment</key> 2426 <key>Comment</key>
2077 <string>Maximum number of inventory items to match against search filter every frame (lower to increase framerate while searching, higher to improve search speed)</string> 2427 <string>Maximum number of inventory items to match against search filter every frame (lower to increase framerate while searching, higher to improve search speed)</string>
2078 <key>Persist</key> 2428 <key>Persist</key>
2079 <integer>1</integer> 2429 <integer>1</integer>
2080 <key>Type</key> 2430 <key>Type</key>
2081 <string>S32</string> 2431 <string>S32</string>
2082 <key>Value</key> 2432 <key>Value</key>
2083 <integer>500</integer> 2433 <integer>500</integer>
2084 </map> 2434 </map>
2085 <key>FindLandArea</key> 2435 <key>FindLandArea</key>
2086 <map> 2436 <map>
2087 <key>Comment</key> 2437 <key>Comment</key>
2088 <string>Enables filtering of land search results by area</string> 2438 <string>Enables filtering of land search results by area</string>
2089 <key>Persist</key> 2439 <key>Persist</key>
2090 <integer>1</integer> 2440 <integer>1</integer>
2091 <key>Type</key> 2441 <key>Type</key>
2092 <string>Boolean</string> 2442 <string>Boolean</string>
2093 <key>Value</key> 2443 <key>Value</key>
2094 <integer>0</integer> 2444 <integer>0</integer>
2095 </map> 2445 </map>
2096 <key>FindLandPrice</key> 2446 <key>FindLandPrice</key>
2097 <map> 2447 <map>
2098 <key>Comment</key> 2448 <key>Comment</key>
2099 <string>Enables filtering of land search results by price</string> 2449 <string>Enables filtering of land search results by price</string>
2100 <key>Persist</key> 2450 <key>Persist</key>
2101 <integer>1</integer> 2451 <integer>1</integer>
2102 <key>Type</key> 2452 <key>Type</key>
2103 <string>Boolean</string> 2453 <string>Boolean</string>
2104 <key>Value</key> 2454 <key>Value</key>
2105 <integer>1</integer> 2455 <integer>1</integer>
2106 </map> 2456 </map>
2107 <key>FindLandType</key> 2457 <key>FindLandType</key>
2108 <map> 2458 <map>
2109 <key>Comment</key> 2459 <key>Comment</key>
2110 <string>Controls which type of land you are searching for in Find Land interface (&quot;All&quot;, &quot;Auction&quot;, &quot;For Sale&quot;)</string> 2460 <string>Controls which type of land you are searching for in Find Land interface ("All", "Auction", "For Sale")</string>
2111 <key>Persist</key> 2461 <key>Persist</key>
2112 <integer>1</integer> 2462 <integer>1</integer>
2113 <key>Type</key> 2463 <key>Type</key>
2114 <string>String</string> 2464 <string>String</string>
2115 <key>Value</key> 2465 <key>Value</key>
2116 <string>All</string> 2466 <string>All</string>
2117 </map> 2467 </map>
2118 <key>FindPeopleOnline</key> 2468 <key>FindPeopleOnline</key>
2119 <map> 2469 <map>
2120 <key>Comment</key> 2470 <key>Comment</key>
2121 <string>Limits people search to only users who are logged on</string> 2471 <string>Limits people search to only users who are logged on</string>
2122 <key>Persist</key> 2472 <key>Persist</key>
2123 <integer>1</integer> 2473 <integer>1</integer>
2124 <key>Type</key> 2474 <key>Type</key>
2125 <string>Boolean</string> 2475 <string>Boolean</string>
2126 <key>Value</key> 2476 <key>Value</key>
2127 <integer>1</integer> 2477 <integer>1</integer>
2128 </map> 2478 </map>
2129 <key>FindPlacesPictures</key> 2479 <key>FindPlacesPictures</key>
2130 <map> 2480 <map>
2131 <key>Comment</key> 2481 <key>Comment</key>
2132 <string>Display only results of find places that have pictures</string> 2482 <string>Display only results of find places that have pictures</string>
2133 <key>Persist</key> 2483 <key>Persist</key>
2134 <integer>1</integer> 2484 <integer>1</integer>
2135 <key>Type</key> 2485 <key>Type</key>
2136 <string>Boolean</string> 2486 <string>Boolean</string>
2137 <key>Value</key> 2487 <key>Value</key>
2138 <integer>1</integer> 2488 <integer>1</integer>
2139 </map> 2489 </map>
2140 <key>FirstLoginThisInstall</key> 2490 <key>FirstLoginThisInstall</key>
2141 <map> 2491 <map>
2142 <key>Comment</key> 2492 <key>Comment</key>
2143 <string>Specifies that you have not successfully logged in since you installed the latest update</string> 2493 <string>Specifies that you have not successfully logged in since you installed the latest update</string>
2144 <key>Persist</key> 2494 <key>Persist</key>
2145 <integer>1</integer> 2495 <integer>1</integer>
2146 <key>Type</key> 2496 <key>Type</key>
2147 <string>Boolean</string> 2497 <string>Boolean</string>
2148 <key>Value</key> 2498 <key>Value</key>
2149 <integer>1</integer> 2499 <integer>1</integer>
2150 </map> 2500 </map>
2151 <key>FirstName</key> 2501 <key>FirstName</key>
2152 <map> 2502 <map>
2153 <key>Comment</key> 2503 <key>Comment</key>
2154 <string>Login first name</string> 2504 <string>Login first name</string>
2155 <key>Persist</key> 2505 <key>Persist</key>
2156 <integer>1</integer> 2506 <integer>1</integer>
2157 <key>Type</key> 2507 <key>Type</key>
2158 <string>String</string> 2508 <string>String</string>
2159 <key>Value</key> 2509 <key>Value</key>
2160 <string /> 2510 <string />
2161 </map> 2511 </map>
2162 <key>FirstPersonAvatarVisible</key> 2512 <key>FirstPersonAvatarVisible</key>
2163 <map> 2513 <map>
2164 <key>Comment</key> 2514 <key>Comment</key>
2165 <string>Display avatar and attachments below neck while in mouselook</string> 2515 <string>Display avatar and attachments below neck while in mouselook</string>
2166 <key>Persist</key> 2516 <key>Persist</key>
2167 <integer>1</integer> 2517 <integer>1</integer>
2168 <key>Type</key> 2518 <key>Type</key>
2169 <string>Boolean</string> 2519 <string>Boolean</string>
2170 <key>Value</key> 2520 <key>Value</key>
2171 <integer>0</integer> 2521 <integer>0</integer>
2172 </map> 2522 </map>
2173 <key>FirstPersonBtnState</key> 2523 <key>FirstPersonBtnState</key>
2174 <map> 2524 <map>
2175 <key>Comment</key> 2525 <key>Comment</key>
2176 <string /> 2526 <string />
2177 <key>Persist</key> 2527 <key>Persist</key>
2178 <integer>0</integer> 2528 <integer>0</integer>
2179 <key>Type</key> 2529 <key>Type</key>
2180 <string>Boolean</string> 2530 <string>Boolean</string>
2181 <key>Value</key> 2531 <key>Value</key>
2182 <integer>0</integer> 2532 <integer>0</integer>
2183 </map> 2533 </map>
2184 <key>FirstRunThisInstall</key> 2534 <key>FirstRunThisInstall</key>
2185 <map> 2535 <map>
2186 <key>Comment</key> 2536 <key>Comment</key>
2187 <string>Specifies that you have not run the viewer since you installed the latest update</string> 2537 <string>Specifies that you have not run the viewer since you installed the latest update</string>
2188 <key>Persist</key> 2538 <key>Persist</key>
2189 <integer>1</integer> 2539 <integer>1</integer>
2190 <key>Type</key> 2540 <key>Type</key>
2191 <string>Boolean</string> 2541 <string>Boolean</string>
2192 <key>Value</key> 2542 <key>Value</key>
2193 <integer>1</integer> 2543 <integer>1</integer>
2194 </map> 2544 </map>
2195 <key>FixedWeather</key> 2545 <key>FixedWeather</key>
2196 <map> 2546 <map>
2197 <key>Comment</key> 2547 <key>Comment</key>
2198 <string>Weather effects do not change over time</string> 2548 <string>Weather effects do not change over time</string>
2199 <key>Persist</key> 2549 <key>Persist</key>
2200 <integer>1</integer> 2550 <integer>1</integer>
2201 <key>Type</key> 2551 <key>Type</key>
2202 <string>Boolean</string> 2552 <string>Boolean</string>
2203 <key>Value</key> 2553 <key>Value</key>
2204 <integer>0</integer> 2554 <integer>0</integer>
2205 </map> 2555 </map>
2206 <key>FloaterAboutRect</key> 2556 <key>FloaterAboutRect</key>
2207 <map> 2557 <map>
2208 <key>Comment</key> 2558 <key>Comment</key>
2209 <string>Rectangle for About window</string> 2559 <string>Rectangle for About window</string>
2210 <key>Persist</key> 2560 <key>Persist</key>
2211 <integer>1</integer> 2561 <integer>1</integer>
2212 <key>Type</key> 2562 <key>Type</key>
2213 <string>Rect</string> 2563 <string>Rect</string>
2214 <key>Value</key> 2564 <key>Value</key>
2215 <array> 2565 <array>
2216 <integer>0</integer> 2566 <integer>0</integer>
2217 <integer>440</integer> 2567 <integer>440</integer>
2218 <integer>470</integer> 2568 <integer>470</integer>
2219 <integer>0</integer> 2569 <integer>0</integer>
2220 </array> 2570 </array>
2221 </map> 2571 </map>
2222 <key>FloaterActiveSpeakersRect</key> 2572 <key>FloaterActiveSpeakersRect</key>
2223 <map> 2573 <map>
2224 <key>Comment</key> 2574 <key>Comment</key>
2225 <string>Rectangle for active speakers window</string> 2575 <string>Rectangle for active speakers window</string>
2226 <key>Persist</key> 2576 <key>Persist</key>
2227 <integer>1</integer> 2577 <integer>1</integer>
2228 <key>Type</key> 2578 <key>Type</key>
2229 <string>Rect</string> 2579 <string>Rect</string>
2230 <key>Value</key> 2580 <key>Value</key>
2231 <array> 2581 <array>
2232 <integer>0</integer> 2582 <integer>0</integer>
2233 <integer>300</integer> 2583 <integer>300</integer>
2234 <integer>250</integer> 2584 <integer>250</integer>
2235 <integer>0</integer> 2585 <integer>0</integer>
2236 </array> 2586 </array>
2237 </map> 2587 </map>
2238 <key>FloaterActiveSpeakersSortColumn</key>
2239 <map>
2240 <key>Comment</key>
2241 <string>Column name to sort on</string>
2242 <key>Persist</key>
2243 <integer>1</integer>
2244 <key>Type</key>
2245 <string>String</string>
2246 <key>Value</key>
2247 <string>speaker_name</string>
2248 </map>
2249 <key>FloaterActiveSpeakersSortAscending</key> 2588 <key>FloaterActiveSpeakersSortAscending</key>
2250 <map> 2589 <map>
2251 <key>Comment</key> 2590 <key>Comment</key>
2252 <string>Whether to sort up or down</string> 2591 <string>Whether to sort up or down</string>
2253 <key>Persist</key> 2592 <key>Persist</key>
2254 <integer>1</integer> 2593 <integer>1</integer>
2255 <key>Type</key> 2594 <key>Type</key>
2256 <string>Boolean</string> 2595 <string>Boolean</string>
2257 <key>Value</key> 2596 <key>Value</key>
2258 <integer>0</integer> 2597 <integer>0</integer>
2259 </map> 2598 </map>
2599 <key>FloaterActiveSpeakersSortColumn</key>
2600 <map>
2601 <key>Comment</key>
2602 <string>Column name to sort on</string>
2603 <key>Persist</key>
2604 <integer>1</integer>
2605 <key>Type</key>
2606 <string>String</string>
2607 <key>Value</key>
2608 <string>speaker_name</string>
2609 </map>
2610 <key>FloaterAdvancedSkyRect</key>
2611 <map>
2612 <key>Comment</key>
2613 <string>Rectangle for Advanced Sky Editor</string>
2614 <key>Persist</key>
2615 <integer>1</integer>
2616 <key>Type</key>
2617 <string>Rect</string>
2618 <key>Value</key>
2619 <array>
2620 <integer>50</integer>
2621 <integer>220</integer>
2622 <integer>450</integer>
2623 <integer>0</integer>
2624 </array>
2625 </map>
2626 <key>FloaterAdvancedWaterRect</key>
2627 <map>
2628 <key>Comment</key>
2629 <string>Rectangle for Advanced Water Editor</string>
2630 <key>Persist</key>
2631 <integer>1</integer>
2632 <key>Type</key>
2633 <string>Rect</string>
2634 <key>Value</key>
2635 <array>
2636 <integer>50</integer>
2637 <integer>220</integer>
2638 <integer>450</integer>
2639 <integer>0</integer>
2640 </array>
2641 </map>
2260 <key>FloaterAudioVolumeRect</key> 2642 <key>FloaterAudioVolumeRect</key>
2261 <map> 2643 <map>
2262 <key>Comment</key> 2644 <key>Comment</key>
2263 <string>Rectangle for Audio Volume window</string> 2645 <string>Rectangle for Audio Volume window</string>
2264 <key>Persist</key> 2646 <key>Persist</key>
2265 <integer>1</integer> 2647 <integer>1</integer>
2266 <key>Type</key> 2648 <key>Type</key>
2267 <string>Rect</string> 2649 <string>Rect</string>
2268 <key>Value</key> 2650 <key>Value</key>
2269 <array> 2651 <array>
2270 <integer>0</integer> 2652 <integer>0</integer>
2271 <integer>440</integer> 2653 <integer>440</integer>
2272 <integer>470</integer> 2654 <integer>470</integer>
2273 <integer>0</integer> 2655 <integer>0</integer>
2274 </array> 2656 </array>
2275 </map> 2657 </map>
2276 <key>FloaterBuildOptionsRect</key> 2658 <key>FloaterBuildOptionsRect</key>
2277 <map> 2659 <map>
2278 <key>Comment</key> 2660 <key>Comment</key>
2279 <string>Rectangle for build options window.</string> 2661 <string>Rectangle for build options window.</string>
2280 <key>Persist</key> 2662 <key>Persist</key>
2281 <integer>1</integer> 2663 <integer>1</integer>
2282 <key>Type</key> 2664 <key>Type</key>
2283 <string>Rect</string> 2665 <string>Rect</string>
2284 <key>Value</key> 2666 <key>Value</key>
2285 <array> 2667 <array>
2286 <integer>0</integer> 2668 <integer>0</integer>
2287 <integer>0</integer> 2669 <integer>0</integer>
2288 <integer>0</integer> 2670 <integer>0</integer>
2289 <integer>0</integer> 2671 <integer>0</integer>
2290 </array> 2672 </array>
2291 </map> 2673 </map>
2292 <key>FloaterBumpRect</key> 2674 <key>FloaterBumpRect</key>
2293 <map> 2675 <map>
2294 <key>Comment</key> 2676 <key>Comment</key>
2295 <string>Rectangle for Bumps/Hits window</string> 2677 <string>Rectangle for Bumps/Hits window</string>
2296 <key>Persist</key> 2678 <key>Persist</key>
2297 <integer>1</integer> 2679 <integer>1</integer>
2298 <key>Type</key> 2680 <key>Type</key>
2299 <string>Rect</string> 2681 <string>Rect</string>
2300 <key>Value</key> 2682 <key>Value</key>
2301 <array> 2683 <array>
2302 <integer>0</integer> 2684 <integer>0</integer>
2303 <integer>180</integer> 2685 <integer>180</integer>
2304 <integer>400</integer> 2686 <integer>400</integer>
2305 <integer>0</integer> 2687 <integer>0</integer>
2306 </array> 2688 </array>
2307 </map> 2689 </map>
2308 <key>FloaterBuyContentsRect</key> 2690 <key>FloaterBuyContentsRect</key>
2309 <map> 2691 <map>
2310 <key>Comment</key> 2692 <key>Comment</key>
2311 <string>Rectangle for Buy Contents window</string> 2693 <string>Rectangle for Buy Contents window</string>
2312 <key>Persist</key> 2694 <key>Persist</key>
2313 <integer>1</integer> 2695 <integer>1</integer>
2314 <key>Type</key> 2696 <key>Type</key>
2315 <string>Rect</string> 2697 <string>Rect</string>
2316 <key>Value</key> 2698 <key>Value</key>
2317 <array> 2699 <array>
2318 <integer>0</integer> 2700 <integer>0</integer>
2319 <integer>250</integer> 2701 <integer>250</integer>
2320 <integer>300</integer> 2702 <integer>300</integer>
2321 <integer>0</integer> 2703 <integer>0</integer>
2322 </array> 2704 </array>
2323 </map> 2705 </map>
2324 <key>FloaterBuyRect</key> 2706 <key>FloaterBuyRect</key>
2325 <map> 2707 <map>
2326 <key>Comment</key> 2708 <key>Comment</key>
2327 <string>Rectangle for buy window</string> 2709 <string>Rectangle for buy window</string>
2328 <key>Persist</key> 2710 <key>Persist</key>
2329 <integer>1</integer> 2711 <integer>1</integer>
2330 <key>Type</key> 2712 <key>Type</key>
2331 <string>Rect</string> 2713 <string>Rect</string>
2332 <key>Value</key> 2714 <key>Value</key>
2333 <array> 2715 <array>
2334 <integer>0</integer> 2716 <integer>0</integer>
2335 <integer>250</integer> 2717 <integer>250</integer>
2336 <integer>300</integer> 2718 <integer>300</integer>
2337 <integer>0</integer> 2719 <integer>0</integer>
2338 </array> 2720 </array>
2339 </map> 2721 </map>
2340 <key>FloaterCameraRect3</key> 2722 <key>FloaterCameraRect3</key>
2341 <map> 2723 <map>
2342 <key>Comment</key> 2724 <key>Comment</key>
2343 <string>Rectangle for camera control window</string> 2725 <string>Rectangle for camera control window</string>
2344 <key>Persist</key> 2726 <key>Persist</key>
2345 <integer>1</integer> 2727 <integer>1</integer>
2346 <key>Type</key> 2728 <key>Type</key>
2347 <string>Rect</string> 2729 <string>Rect</string>
2348 <key>Value</key> 2730 <key>Value</key>
2349 <array> 2731 <array>
2350 <integer>0</integer> 2732 <integer>0</integer>
2351 <integer>64</integer> 2733 <integer>64</integer>
2352 <integer>176</integer> 2734 <integer>176</integer>
2353 <integer>0</integer> 2735 <integer>0</integer>
2354 </array> 2736 </array>
2355 </map> 2737 </map>
2356 <key>FloaterChatRect</key> 2738 <key>FloaterChatRect</key>
2357 <map> 2739 <map>
2358 <key>Comment</key> 2740 <key>Comment</key>
2359 <string>Rectangle for chat history</string> 2741 <string>Rectangle for chat history</string>
2360 <key>Persist</key> 2742 <key>Persist</key>
2361 <integer>1</integer> 2743 <integer>1</integer>
2362 <key>Type</key> 2744 <key>Type</key>
2363 <string>Rect</string> 2745 <string>Rect</string>
2364 <key>Value</key> 2746 <key>Value</key>
2365 <array> 2747 <array>
2366 <integer>0</integer> 2748 <integer>0</integer>
2367 <integer>172</integer> 2749 <integer>172</integer>
2368 <integer>500</integer> 2750 <integer>500</integer>
2369 <integer>0</integer> 2751 <integer>0</integer>
2370 </array> 2752 </array>
2371 </map> 2753 </map>
2372 <key>FloaterClothingRect</key> 2754 <key>FloaterClothingRect</key>
2373 <map> 2755 <map>
2374 <key>Comment</key> 2756 <key>Comment</key>
2375 <string>Rectangle for clothing window</string> 2757 <string>Rectangle for clothing window</string>
2376 <key>Persist</key> 2758 <key>Persist</key>
2377 <integer>1</integer> 2759 <integer>1</integer>
2378 <key>Type</key> 2760 <key>Type</key>
2379 <string>Rect</string> 2761 <string>Rect</string>
2380 <key>Value</key> 2762 <key>Value</key>
2381 <array> 2763 <array>
2382 <integer>0</integer> 2764 <integer>0</integer>
2383 <integer>480</integer> 2765 <integer>480</integer>
2384 <integer>320</integer> 2766 <integer>320</integer>
2385 <integer>0</integer> 2767 <integer>0</integer>
2386 </array> 2768 </array>
2387 </map> 2769 </map>
2388 <key>FloaterContactsRect</key> 2770 <key>FloaterContactsRect</key>
2389 <map> 2771 <map>
2390 <key>Comment</key> 2772 <key>Comment</key>
2391 <string>Rectangle for chat history</string> 2773 <string>Rectangle for chat history</string>
2392 <key>Persist</key> 2774 <key>Persist</key>
2393 <integer>1</integer> 2775 <integer>1</integer>
2394 <key>Type</key> 2776 <key>Type</key>
2395 <string>Rect</string> 2777 <string>Rect</string>
2396 <key>Value</key> 2778 <key>Value</key>
2397 <array> 2779 <array>
2398 <integer>0</integer> 2780 <integer>0</integer>
2399 <integer>390</integer> 2781 <integer>390</integer>
2400 <integer>395</integer> 2782 <integer>395</integer>
2401 <integer>0</integer> 2783 <integer>0</integer>
2402 </array> 2784 </array>
2403 </map> 2785 </map>
2404 <key>FloaterCustomizeAppearanceRect</key> 2786 <key>FloaterCustomizeAppearanceRect</key>
2405 <map> 2787 <map>
2406 <key>Comment</key> 2788 <key>Comment</key>
2407 <string>Rectangle for avatar customization window</string> 2789 <string>Rectangle for avatar customization window</string>
2408 <key>Persist</key> 2790 <key>Persist</key>
2409 <integer>1</integer> 2791 <integer>1</integer>
2410 <key>Type</key> 2792 <key>Type</key>
2411 <string>Rect</string> 2793 <string>Rect</string>
2412 <key>Value</key> 2794 <key>Value</key>
2413 <array> 2795 <array>
2414 <integer>0</integer> 2796 <integer>0</integer>
2415 <integer>540</integer> 2797 <integer>540</integer>
2416 <integer>494</integer> 2798 <integer>494</integer>
2417 <integer>0</integer> 2799 <integer>0</integer>
2418 </array> 2800 </array>
2419 </map> 2801 </map>
2802 <key>FloaterDayCycleRect</key>
2803 <map>
2804 <key>Comment</key>
2805 <string>Rectangle for Day Cycle Editor</string>
2806 <key>Persist</key>
2807 <integer>1</integer>
2808 <key>Type</key>
2809 <string>Rect</string>
2810 <key>Value</key>
2811 <array>
2812 <integer>50</integer>
2813 <integer>450</integer>
2814 <integer>300</integer>
2815 <integer>0</integer>
2816 </array>
2817 </map>
2818 <key>FloaterEnvRect</key>
2819 <map>
2820 <key>Comment</key>
2821 <string>Rectangle for Environment Editor</string>
2822 <key>Persist</key>
2823 <integer>1</integer>
2824 <key>Type</key>
2825 <string>Rect</string>
2826 <key>Value</key>
2827 <array>
2828 <integer>50</integer>
2829 <integer>150</integer>
2830 <integer>650</integer>
2831 <integer>0</integer>
2832 </array>
2833 </map>
2420 <key>FloaterFindRect2</key> 2834 <key>FloaterFindRect2</key>
2421 <map> 2835 <map>
2422 <key>Comment</key> 2836 <key>Comment</key>
2423 <string>Rectangle for Find window</string> 2837 <string>Rectangle for Find window</string>
2424 <key>Persist</key> 2838 <key>Persist</key>
2425 <integer>1</integer> 2839 <integer>1</integer>
2426 <key>Type</key> 2840 <key>Type</key>
2427 <string>Rect</string> 2841 <string>Rect</string>
2428 <key>Value</key> 2842 <key>Value</key>
2429 <array> 2843 <array>
2430 <integer>0</integer> 2844 <integer>0</integer>
2431 <integer>570</integer> 2845 <integer>570</integer>
2432 <integer>780</integer> 2846 <integer>780</integer>
2433 <integer>0</integer> 2847 <integer>0</integer>
2434 </array> 2848 </array>
2435 </map> 2849 </map>
2436 <key>FloaterFriendsRect</key> 2850 <key>FloaterFriendsRect</key>
2437 <map> 2851 <map>
2438 <key>Comment</key> 2852 <key>Comment</key>
2439 <string>Rectangle for friends window</string> 2853 <string>Rectangle for friends window</string>
2440 <key>Persist</key> 2854 <key>Persist</key>
2441 <integer>1</integer> 2855 <integer>1</integer>
2442 <key>Type</key> 2856 <key>Type</key>
2443 <string>Rect</string> 2857 <string>Rect</string>
2444 <key>Value</key> 2858 <key>Value</key>
2445 <array> 2859 <array>
2446 <integer>0</integer> 2860 <integer>0</integer>
2447 <integer>400</integer> 2861 <integer>400</integer>
2448 <integer>250</integer> 2862 <integer>250</integer>
2449 <integer>0</integer> 2863 <integer>0</integer>
2450 </array> 2864 </array>
2451 </map> 2865 </map>
2452 <key>FloaterGestureRect2</key> 2866 <key>FloaterGestureRect2</key>
2453 <map> 2867 <map>
2454 <key>Comment</key> 2868 <key>Comment</key>
2455 <string>Rectangle for gestures window</string> 2869 <string>Rectangle for gestures window</string>
2456 <key>Persist</key> 2870 <key>Persist</key>
2457 <integer>1</integer> 2871 <integer>1</integer>
2458 <key>Type</key> 2872 <key>Type</key>
2459 <string>Rect</string> 2873 <string>Rect</string>
2460 <key>Value</key> 2874 <key>Value</key>
2461 <array> 2875 <array>
2462 <integer>0</integer> 2876 <integer>0</integer>
2463 <integer>465</integer> 2877 <integer>465</integer>
2464 <integer>350</integer> 2878 <integer>350</integer>
2465 <integer>0</integer> 2879 <integer>0</integer>
2466 </array> 2880 </array>
2467 </map> 2881 </map>
2468 <key>FloaterHtmlRect</key>
2469 <map>
2470 <key>Comment</key>
2471 <string>Rectangle for HTML window</string>
2472 <key>Persist</key>
2473 <integer>1</integer>
2474 <key>Type</key>
2475 <string>Rect</string>
2476 <key>Value</key>
2477 <array>
2478 <integer>100</integer>
2479 <integer>460</integer>
2480 <integer>370</integer>
2481 <integer>100</integer>
2482 </array>
2483 </map>
2484 <key>FloaterHUDRect</key> 2882 <key>FloaterHUDRect</key>
2485 <map> 2883 <map>
2486 <key>Comment</key> 2884 <key>Comment</key>
2487 <string>Rectangle for HUD Floater window</string> 2885 <string>Rectangle for HUD Floater window</string>
2488 <key>Persist</key> 2886 <key>Persist</key>
2489 <integer>1</integer> 2887 <integer>1</integer>
2490 <key>Type</key> 2888 <key>Type</key>
2491 <string>Rect</string> 2889 <string>Rect</string>
2492 <key>Value</key> 2890 <key>Value</key>
2493 <array> 2891 <array>
2494 <integer>0</integer> 2892 <integer>0</integer>
2495 <integer>282</integer> 2893 <integer>282</integer>
2496 <integer>342</integer> 2894 <integer>342</integer>
2497 <integer>0</integer> 2895 <integer>0</integer>
2498 </array> 2896 </array>
2499 </map> 2897 </map>
2898 <key>FloaterHtmlRect</key>
2899 <map>
2900 <key>Comment</key>
2901 <string>Rectangle for HTML window</string>
2902 <key>Persist</key>
2903 <integer>1</integer>
2904 <key>Type</key>
2905 <string>Rect</string>
2906 <key>Value</key>
2907 <array>
2908 <integer>100</integer>
2909 <integer>460</integer>
2910 <integer>370</integer>
2911 <integer>100</integer>
2912 </array>
2913 </map>
2500 <key>FloaterIMRect</key> 2914 <key>FloaterIMRect</key>
2501 <map> 2915 <map>
2502 <key>Comment</key> 2916 <key>Comment</key>
2503 <string>Rectangle for IM window</string> 2917 <string>Rectangle for IM window</string>
2504 <key>Persist</key> 2918 <key>Persist</key>
2505 <integer>1</integer> 2919 <integer>1</integer>
2506 <key>Type</key> 2920 <key>Type</key>
2507 <string>Rect</string> 2921 <string>Rect</string>
2508 <key>Value</key> 2922 <key>Value</key>
2509 <array> 2923 <array>
2510 <integer>0</integer> 2924 <integer>0</integer>
2511 <integer>160</integer> 2925 <integer>160</integer>
2512 <integer>500</integer> 2926 <integer>500</integer>
2513 <integer>0</integer> 2927 <integer>0</integer>
2514 </array> 2928 </array>
2515 </map> 2929 </map>
2516 <key>FloaterInspectRect</key> 2930 <key>FloaterInspectRect</key>
2517 <map> 2931 <map>
2518 <key>Comment</key> 2932 <key>Comment</key>
2519 <string>Rectangle for Object Inspect window</string> 2933 <string>Rectangle for Object Inspect window</string>
2520 <key>Persist</key> 2934 <key>Persist</key>
2521 <integer>1</integer> 2935 <integer>1</integer>
2522 <key>Type</key> 2936 <key>Type</key>
2523 <string>Rect</string> 2937 <string>Rect</string>
2524 <key>Value</key> 2938 <key>Value</key>
2525 <array> 2939 <array>
2526 <integer>0</integer> 2940 <integer>0</integer>
2527 <integer>400</integer> 2941 <integer>400</integer>
2528 <integer>400</integer> 2942 <integer>400</integer>
2529 <integer>0</integer> 2943 <integer>0</integer>
2530 </array> 2944 </array>
2531 </map> 2945 </map>
2532 <key>FloaterInventoryRect</key> 2946 <key>FloaterInventoryRect</key>
2533 <map> 2947 <map>
2534 <key>Comment</key> 2948 <key>Comment</key>
2535 <string>Rectangle for inventory window</string> 2949 <string>Rectangle for inventory window</string>
2536 <key>Persist</key> 2950 <key>Persist</key>
2537 <integer>1</integer> 2951 <integer>1</integer>
2538 <key>Type</key> 2952 <key>Type</key>
2539 <string>Rect</string> 2953 <string>Rect</string>
2540 <key>Value</key> 2954 <key>Value</key>
2541 <array> 2955 <array>
2542 <integer>0</integer> 2956 <integer>0</integer>
2543 <integer>400</integer> 2957 <integer>400</integer>
2544 <integer>300</integer> 2958 <integer>300</integer>
2545 <integer>0</integer> 2959 <integer>0</integer>
2546 </array> 2960 </array>
2547 </map> 2961 </map>
2548 <key>FloaterJoystickRect</key> 2962 <key>FloaterJoystickRect</key>
2549 <map> 2963 <map>
2550 <key>Comment</key> 2964 <key>Comment</key>
2551 <string>Rectangle for joystick controls window.</string> 2965 <string>Rectangle for joystick controls window.</string>
2552 <key>Persist</key> 2966 <key>Persist</key>
2553 <integer>1</integer> 2967 <integer>1</integer>
2554 <key>Type</key> 2968 <key>Type</key>
2555 <string>Rect</string> 2969 <string>Rect</string>
2556 <key>Value</key> 2970 <key>Value</key>
2557 <array> 2971 <array>
2558 <integer>0</integer> 2972 <integer>0</integer>
2559 <integer>0</integer> 2973 <integer>0</integer>
2560 <integer>0</integer> 2974 <integer>0</integer>
2561 <integer>0</integer> 2975 <integer>0</integer>
2562 </array> 2976 </array>
2563 </map> 2977 </map>
2564 <key>FloaterLagMeter</key> 2978 <key>FloaterLagMeter</key>
2565 <map> 2979 <map>
2566 <key>Comment</key> 2980 <key>Comment</key>
2567 <string>Rectangle for lag meter</string> 2981 <string>Rectangle for lag meter</string>
2568 <key>Persist</key> 2982 <key>Persist</key>
2569 <integer>1</integer> 2983 <integer>1</integer>
2570 <key>Type</key> 2984 <key>Type</key>
2571 <string>Rect</string> 2985 <string>Rect</string>
2572 <key>Value</key> 2986 <key>Value</key>
2573 <array> 2987 <array>
2574 <integer>0</integer> 2988 <integer>0</integer>
2575 <integer>142</integer> 2989 <integer>142</integer>
2576 <integer>350</integer> 2990 <integer>350</integer>
2577 <integer>0</integer> 2991 <integer>0</integer>
2578 </array> 2992 </array>
2579 </map> 2993 </map>
2580 <key>FloaterLandRect5</key> 2994 <key>FloaterLandRect5</key>
2581 <map> 2995 <map>
2582 <key>Comment</key> 2996 <key>Comment</key>
2583 <string>Rectangle for About Land window</string> 2997 <string>Rectangle for About Land window</string>
2584 <key>Persist</key> 2998 <key>Persist</key>
2585 <integer>1</integer> 2999 <integer>1</integer>
2586 <key>Type</key> 3000 <key>Type</key>
2587 <string>Rect</string> 3001 <string>Rect</string>
2588 <key>Value</key> 3002 <key>Value</key>
2589 <array> 3003 <array>
2590 <integer>0</integer> 3004 <integer>0</integer>
2591 <integer>370</integer> 3005 <integer>370</integer>
2592 <integer>460</integer> 3006 <integer>460</integer>
2593 <integer>0</integer> 3007 <integer>0</integer>
2594 </array> 3008 </array>
2595 </map> 3009 </map>
2596 <key>FloaterLandmarkRect</key> 3010 <key>FloaterLandmarkRect</key>
2597 <map> 3011 <map>
2598 <key>Comment</key> 3012 <key>Comment</key>
2599 <string>Rectangle for landmark picker</string> 3013 <string>Rectangle for landmark picker</string>
2600 <key>Persist</key> 3014 <key>Persist</key>
2601 <integer>1</integer> 3015 <integer>1</integer>
2602 <key>Type</key> 3016 <key>Type</key>
2603 <string>Rect</string> 3017 <string>Rect</string>
2604 <key>Value</key> 3018 <key>Value</key>
2605 <array> 3019 <array>
2606 <integer>0</integer> 3020 <integer>0</integer>
2607 <integer>290</integer> 3021 <integer>290</integer>
2608 <integer>310</integer> 3022 <integer>310</integer>
2609 <integer>0</integer> 3023 <integer>0</integer>
2610 </array> 3024 </array>
2611 </map> 3025 </map>
2612 <key>FloaterMediaRect</key> 3026 <key>FloaterMediaRect</key>
2613 <map> 3027 <map>
2614 <key>Comment</key> 3028 <key>Comment</key>
2615 <string>Rectangle for media browser window</string> 3029 <string>Rectangle for media browser window</string>
2616 <key>Persist</key> 3030 <key>Persist</key>
2617 <integer>1</integer> 3031 <integer>1</integer>
2618 <key>Type</key> 3032 <key>Type</key>
2619 <string>Rect</string> 3033 <string>Rect</string>
2620 <key>Value</key> 3034 <key>Value</key>
2621 <array> 3035 <array>
2622 <integer>16</integer> 3036 <integer>16</integer>
2623 <integer>650</integer> 3037 <integer>650</integer>
2624 <integer>600</integer> 3038 <integer>600</integer>
2625 <integer>128</integer> 3039 <integer>128</integer>
2626 </array> 3040 </array>
2627 </map> 3041 </map>
2628 <key>FloaterMiniMapRect</key> 3042 <key>FloaterMiniMapRect</key>
2629 <map> 3043 <map>
2630 <key>Comment</key> 3044 <key>Comment</key>
2631 <string>Rectangle for world map</string> 3045 <string>Rectangle for world map</string>
2632 <key>Persist</key> 3046 <key>Persist</key>
2633 <integer>1</integer> 3047 <integer>1</integer>
2634 <key>Type</key> 3048 <key>Type</key>
2635 <string>Rect</string> 3049 <string>Rect</string>
2636 <key>Value</key> 3050 <key>Value</key>
2637 <array> 3051 <array>
2638 <integer>0</integer> 3052 <integer>0</integer>
2639 <integer>225</integer> 3053 <integer>225</integer>
2640 <integer>200</integer> 3054 <integer>200</integer>
2641 <integer>0</integer> 3055 <integer>0</integer>
2642 </array> 3056 </array>
2643 </map> 3057 </map>
2644 <key>FloaterMoveRect2</key> 3058 <key>FloaterMoveRect2</key>
2645 <map> 3059 <map>
2646 <key>Comment</key> 3060 <key>Comment</key>
2647 <string>Rectangle for avatar control window</string> 3061 <string>Rectangle for avatar control window</string>
2648 <key>Persist</key> 3062 <key>Persist</key>
2649 <integer>1</integer> 3063 <integer>1</integer>
2650 <key>Type</key> 3064 <key>Type</key>
2651 <string>Rect</string> 3065 <string>Rect</string>
2652 <key>Value</key> 3066 <key>Value</key>
2653 <array> 3067 <array>
2654 <integer>0</integer> 3068 <integer>0</integer>
2655 <integer>58</integer> 3069 <integer>58</integer>
2656 <integer>135</integer> 3070 <integer>135</integer>
2657 <integer>0</integer> 3071 <integer>0</integer>
2658 </array> 3072 </array>
2659 </map> 3073 </map>
2660 <key>FloaterMuteRect3</key> 3074 <key>FloaterMuteRect3</key>
2661 <map> 3075 <map>
2662 <key>Comment</key> 3076 <key>Comment</key>
2663 <string>Rectangle for mute window</string> 3077 <string>Rectangle for mute window</string>
2664 <key>Persist</key> 3078 <key>Persist</key>
2665 <integer>1</integer> 3079 <integer>1</integer>
2666 <key>Type</key> 3080 <key>Type</key>
2667 <string>Rect</string> 3081 <string>Rect</string>
2668 <key>Value</key> 3082 <key>Value</key>
2669 <array> 3083 <array>
2670 <integer>0</integer> 3084 <integer>0</integer>
2671 <integer>300</integer> 3085 <integer>300</integer>
2672 <integer>300</integer> 3086 <integer>300</integer>
2673 <integer>0</integer> 3087 <integer>0</integer>
2674 </array> 3088 </array>
2675 </map> 3089 </map>
2676 <key>FloaterOpenObjectRect</key> 3090 <key>FloaterOpenObjectRect</key>
2677 <map> 3091 <map>
2678 <key>Comment</key> 3092 <key>Comment</key>
2679 <string>Rectangle for Open Object window</string> 3093 <string>Rectangle for Open Object window</string>
2680 <key>Persist</key> 3094 <key>Persist</key>
2681 <integer>1</integer> 3095 <integer>1</integer>
2682 <key>Type</key> 3096 <key>Type</key>
2683 <string>Rect</string> 3097 <string>Rect</string>
2684 <key>Value</key> 3098 <key>Value</key>
2685 <array> 3099 <array>
2686 <integer>0</integer> 3100 <integer>0</integer>
2687 <integer>350</integer> 3101 <integer>350</integer>
2688 <integer>300</integer> 3102 <integer>300</integer>
2689 <integer>0</integer> 3103 <integer>0</integer>
2690 </array> 3104 </array>
2691 </map> 3105 </map>
2692 <key>FloaterPayRectB</key> 3106 <key>FloaterPayRectB</key>
2693 <map> 3107 <map>
2694 <key>Comment</key> 3108 <key>Comment</key>
2695 <string>Rectangle for pay window</string> 3109 <string>Rectangle for pay window</string>
2696 <key>Persist</key> 3110 <key>Persist</key>
2697 <integer>1</integer> 3111 <integer>1</integer>
2698 <key>Type</key> 3112 <key>Type</key>
2699 <string>Rect</string> 3113 <string>Rect</string>
2700 <key>Value</key> 3114 <key>Value</key>
2701 <array> 3115 <array>
2702 <integer>0</integer> 3116 <integer>0</integer>
2703 <integer>150</integer> 3117 <integer>150</integer>
2704 <integer>400</integer> 3118 <integer>400</integer>
2705 <integer>0</integer> 3119 <integer>0</integer>
2706 </array> 3120 </array>
2707 </map> 3121 </map>
2708 <key>FloaterRegionInfo</key> 3122 <key>FloaterRegionInfo</key>
2709 <map> 3123 <map>
2710 <key>Comment</key> 3124 <key>Comment</key>
2711 <string>Rectangle for region info window</string> 3125 <string>Rectangle for region info window</string>
2712 <key>Persist</key> 3126 <key>Persist</key>
2713 <integer>1</integer> 3127 <integer>1</integer>
2714 <key>Type</key> 3128 <key>Type</key>
2715 <string>Rect</string> 3129 <string>Rect</string>
2716 <key>Value</key> 3130 <key>Value</key>
2717 <array> 3131 <array>
2718 <integer>0</integer> 3132 <integer>0</integer>
2719 <integer>512</integer> 3133 <integer>512</integer>
2720 <integer>480</integer> 3134 <integer>480</integer>
2721 <integer>0</integer> 3135 <integer>0</integer>
2722 </array> 3136 </array>
2723 </map> 3137 </map>
2724 <key>FloaterScriptDebugRect</key> 3138 <key>FloaterScriptDebugRect</key>
2725 <map> 3139 <map>
2726 <key>Comment</key> 3140 <key>Comment</key>
2727 <string>Rectangle for Script Error/Debug window</string> 3141 <string>Rectangle for Script Error/Debug window</string>
2728 <key>Persist</key> 3142 <key>Persist</key>
2729 <integer>1</integer> 3143 <integer>1</integer>
2730 <key>Type</key> 3144 <key>Type</key>
2731 <string>Rect</string> 3145 <string>Rect</string>
2732 <key>Value</key> 3146 <key>Value</key>
2733 <array> 3147 <array>
2734 <integer>0</integer> 3148 <integer>0</integer>
2735 <integer>130</integer> 3149 <integer>130</integer>
2736 <integer>450</integer> 3150 <integer>450</integer>
2737 <integer>0</integer> 3151 <integer>0</integer>
2738 </array> 3152 </array>
2739 </map> 3153 </map>
2740 <key>FloaterSnapshotRect</key> 3154 <key>FloaterSnapshotRect</key>
2741 <map> 3155 <map>
2742 <key>Comment</key> 3156 <key>Comment</key>
2743 <string>Rectangle for snapshot window</string> 3157 <string>Rectangle for snapshot window</string>
2744 <key>Persist</key> 3158 <key>Persist</key>
2745 <integer>1</integer> 3159 <integer>1</integer>
2746 <key>Type</key> 3160 <key>Type</key>
2747 <string>Rect</string> 3161 <string>Rect</string>
2748 <key>Value</key> 3162 <key>Value</key>
2749 <array> 3163 <array>
2750 <integer>0</integer> 3164 <integer>0</integer>
2751 <integer>200</integer> 3165 <integer>200</integer>
2752 <integer>200</integer> 3166 <integer>200</integer>
2753 <integer>400</integer> 3167 <integer>400</integer>
2754 </array> 3168 </array>
2755 </map> 3169 </map>
2756 <key>FloaterViewBottom</key> 3170 <key>FloaterViewBottom</key>
2757 <map> 3171 <map>
2758 <key>Comment</key> 3172 <key>Comment</key>
2759 <string>[DO NOT MODIFY] Controls layout of floating windows within SL window</string> 3173 <string>[DO NOT MODIFY] Controls layout of floating windows within SL window</string>
2760 <key>Persist</key> 3174 <key>Persist</key>
2761 <integer>1</integer> 3175 <integer>1</integer>
2762 <key>Type</key> 3176 <key>Type</key>
2763 <string>S32</string> 3177 <string>S32</string>
2764 <key>Value</key> 3178 <key>Value</key>
2765 <integer>-1</integer> 3179 <integer>-1</integer>
2766 </map> 3180 </map>
2767 <key>FloaterWorldMapRect2</key> 3181 <key>FloaterWorldMapRect2</key>
2768 <map> 3182 <map>
2769 <key>Comment</key> 3183 <key>Comment</key>
2770 <string>Rectangle for world map window</string> 3184 <string>Rectangle for world map window</string>
2771 <key>Persist</key> 3185 <key>Persist</key>
2772 <integer>1</integer> 3186 <integer>1</integer>
2773 <key>Type</key> 3187 <key>Type</key>
2774 <string>Rect</string> 3188 <string>Rect</string>
2775 <key>Value</key> 3189 <key>Value</key>
2776 <array> 3190 <array>
2777 <integer>0</integer> 3191 <integer>0</integer>
2778 <integer>0</integer> 3192 <integer>0</integer>
2779 <integer>0</integer> 3193 <integer>0</integer>
2780 <integer>0</integer> 3194 <integer>0</integer>
2781 </array> 3195 </array>
2782 </map> 3196 </map>
2783 <key>FlyBtnState</key> 3197 <key>FlyBtnState</key>
2784 <map> 3198 <map>
2785 <key>Comment</key> 3199 <key>Comment</key>
2786 <string /> 3200 <string />
2787 <key>Persist</key> 3201 <key>Persist</key>
2788 <integer>0</integer> 3202 <integer>0</integer>
2789 <key>Type</key> 3203 <key>Type</key>
2790 <string>Boolean</string> 3204 <string>Boolean</string>
2791 <key>Value</key> 3205 <key>Value</key>
2792 <integer>0</integer> 3206 <integer>0</integer>
2793 </map> 3207 </map>
2794 <key>FlycamAbsolute</key> 3208 <key>FlycamAbsolute</key>
2795 <map> 3209 <map>
2796 <key>Comment</key> 3210 <key>Comment</key>
2797 <string>Treat Flycam values as absolute positions (not deltas).</string> 3211 <string>Treat Flycam values as absolute positions (not deltas).</string>
2798 <key>Persist</key> 3212 <key>Persist</key>
2799 <integer>1</integer> 3213 <integer>1</integer>
2800 <key>Type</key> 3214 <key>Type</key>
2801 <string>Boolean</string> 3215 <string>Boolean</string>
2802 <key>Value</key> 3216 <key>Value</key>
2803 <integer>0</integer> 3217 <integer>0</integer>
2804 </map> 3218 </map>
2805 <key>AutoLeveling</key>
2806 <map>
2807 <key>Comment</key>
2808 <string>Keep Flycam level.</string>
2809 <key>Persist</key>
2810 <integer>1</integer>
2811 <key>Type</key>
2812 <string>Boolean</string>
2813 <key>Value</key>
2814 <integer>1</integer>
2815 </map>
2816 <key>Cursor3D</key>
2817 <map>
2818 <key>Comment</key>
2819 <string>Tread Joystick values as absolute positions (not deltas).</string>
2820 <key>Persist</key>
2821 <integer>1</integer>
2822 <key>Type</key>
2823 <string>Boolean</string>
2824 <key>Value</key>
2825 <integer>1</integer>
2826 </map>
2827 <key>ZoomDirect</key>
2828 <map>
2829 <key>Comment</key>
2830 <string>Map Joystick zoom axis directly to camera zoom.</string>
2831 <key>Persist</key>
2832 <integer>1</integer>
2833 <key>Type</key>
2834 <string>Boolean</string>
2835 <key>Value</key>
2836 <integer>0</integer>
2837 </map>
2838 <key>JoystickInitialized</key>
2839 <map>
2840 <key>Comment</key>
2841 <string>Whether or not a joystick has been detected and initiailized.</string>
2842 <key>Persist</key>
2843 <integer>0</integer>
2844 <key>Type</key>
2845 <string>String</string>
2846 <key>Value</key>
2847 <string></string>
2848 </map>
2849 <key>JoystickEnabled</key>
2850 <map>
2851 <key>Comment</key>
2852 <string>Enables Joystick Input.</string>
2853 <key>Persist</key>
2854 <integer>1</integer>
2855 <key>Type</key>
2856 <string>Boolean</string>
2857 <key>Value</key>
2858 <integer>0</integer>
2859 </map>
2860 <key>JoystickFlycamEnabled</key>
2861 <map>
2862 <key>Comment</key>
2863 <string>Enables the Joystick to control the flycam.</string>
2864 <key>Persist</key>
2865 <integer>1</integer>
2866 <key>Type</key>
2867 <string>Boolean</string>
2868 <key>Value</key>
2869 <string>1</string>
2870 </map>
2871 <key>JoystickAvatarEnabled</key>
2872 <map>
2873 <key>Comment</key>
2874 <string>Enables the Joystick to control Avatar movmement.</string>
2875 <key>Persist</key>
2876 <integer>1</integer>
2877 <key>Type</key>
2878 <string>Boolean</string>
2879 <key>Value</key>
2880 <string>1</string>
2881 </map>
2882 <key>JoystickBuildEnabled</key>
2883 <map>
2884 <key>Comment</key>
2885 <string>Enables the Joystick to move edited objects.</string>
2886 <key>Persist</key>
2887 <integer>1</integer>
2888 <key>Type</key>
2889 <string>Boolean</string>
2890 <key>Value</key>
2891 <string>1</string>
2892 </map>
2893 <key>JoystickAxis0</key>
2894 <map>
2895 <key>Comment</key>
2896 <string>Flycam hardware axis mapping for internal axis 0 ([0, 5]).</string>
2897 <key>Persist</key>
2898 <integer>1</integer>
2899 <key>Type</key>
2900 <string>S32</string>
2901 <key>Value</key>
2902 <integer>1</integer>
2903 </map>
2904 <key>JoystickAxis1</key>
2905 <map>
2906 <key>Comment</key>
2907 <string>Flycam hardware axis mapping for internal axis 1 ([0, 5]).</string>
2908 <key>Persist</key>
2909 <integer>1</integer>
2910 <key>Type</key>
2911 <string>S32</string>
2912 <key>Value</key>
2913 <integer>0</integer>
2914 </map>
2915 <key>JoystickAxis2</key>
2916 <map>
2917 <key>Comment</key>
2918 <string>Flycam hardware axis mapping for internal axis 2 ([0, 5]).</string>
2919 <key>Persist</key>
2920 <integer>1</integer>
2921 <key>Type</key>
2922 <string>S32</string>
2923 <key>Value</key>
2924 <integer>2</integer>
2925 </map>
2926 <key>JoystickAxis3</key>
2927 <map>
2928 <key>Comment</key>
2929 <string>Flycam hardware axis mapping for internal axis 3 ([0, 5]).</string>
2930 <key>Persist</key>
2931 <integer>1</integer>
2932 <key>Type</key>
2933 <string>S32</string>
2934 <key>Value</key>
2935 <integer>4</integer>
2936 </map>
2937 <key>JoystickAxis4</key>
2938 <map>
2939 <key>Comment</key>
2940 <string>Flycam hardware axis mapping for internal axis 4 ([0, 5]).</string>
2941 <key>Persist</key>
2942 <integer>1</integer>
2943 <key>Type</key>
2944 <string>S32</string>
2945 <key>Value</key>
2946 <integer>3</integer>
2947 </map>
2948 <key>JoystickAxis5</key>
2949 <map>
2950 <key>Comment</key>
2951 <string>Flycam hardware axis mapping for internal axis 5 ([0, 5]).</string>
2952 <key>Persist</key>
2953 <integer>1</integer>
2954 <key>Type</key>
2955 <string>S32</string>
2956 <key>Value</key>
2957 <integer>5</integer>
2958 </map>
2959 <key>JoystickAxis6</key>
2960 <map>
2961 <key>Comment</key>
2962 <string>Flycam hardware axis mapping for internal axis 6 ([0, 5]).</string>
2963 <key>Persist</key>
2964 <integer>1</integer>
2965 <key>Type</key>
2966 <string>S32</string>
2967 <key>Value</key>
2968 <integer>-1</integer>
2969 </map>
2970 <key>FlycamAxisDeadZone0</key> 3219 <key>FlycamAxisDeadZone0</key>
2971 <map> 3220 <map>
2972 <key>Comment</key> 3221 <key>Comment</key>
2973 <string>Flycam axis 0 dead zone.</string> 3222 <string>Flycam axis 0 dead zone.</string>
2974 <key>Persist</key> 3223 <key>Persist</key>
2975 <integer>1</integer> 3224 <integer>1</integer>
2976 <key>Type</key> 3225 <key>Type</key>
2977 <string>F32</string> 3226 <string>F32</string>
2978 <key>Value</key> 3227 <key>Value</key>
2979 <real>0.1</real> 3228 <real>0.1</real>
2980 </map> 3229 </map>
2981 <key>FlycamAxisDeadZone1</key> 3230 <key>FlycamAxisDeadZone1</key>
2982 <map> 3231 <map>
2983 <key>Comment</key> 3232 <key>Comment</key>
2984 <string>Flycam axis 1 dead zone.</string> 3233 <string>Flycam axis 1 dead zone.</string>
2985 <key>Persist</key> 3234 <key>Persist</key>
2986 <integer>1</integer> 3235 <integer>1</integer>
2987 <key>Type</key> 3236 <key>Type</key>
2988 <string>F32</string> 3237 <string>F32</string>
2989 <key>Value</key> 3238 <key>Value</key>
2990 <real>0.1</real> 3239 <real>0.1</real>
2991 </map> 3240 </map>
2992 <key>FlycamAxisDeadZone2</key> 3241 <key>FlycamAxisDeadZone2</key>
2993 <map> 3242 <map>
2994 <key>Comment</key> 3243 <key>Comment</key>
2995 <string>Flycam axis 2 dead zone.</string> 3244 <string>Flycam axis 2 dead zone.</string>
2996 <key>Persist</key> 3245 <key>Persist</key>
2997 <integer>1</integer> 3246 <integer>1</integer>
2998 <key>Type</key> 3247 <key>Type</key>
2999 <string>F32</string> 3248 <string>F32</string>
3000 <key>Value</key> 3249 <key>Value</key>
3001 <real>0.1</real> 3250 <real>0.1</real>
3002 </map> 3251 </map>
3003 <key>FlycamAxisDeadZone3</key> 3252 <key>FlycamAxisDeadZone3</key>
3004 <map> 3253 <map>
3005 <key>Comment</key> 3254 <key>Comment</key>
3006 <string>Flycam axis 3 dead zone.</string> 3255 <string>Flycam axis 3 dead zone.</string>
3007 <key>Persist</key> 3256 <key>Persist</key>
3008 <integer>1</integer> 3257 <integer>1</integer>
3009 <key>Type</key> 3258 <key>Type</key>
3010 <string>F32</string> 3259 <string>F32</string>
3011 <key>Value</key> 3260 <key>Value</key>
3012 <real>0.1</real> 3261 <real>0.1</real>
3013 </map> 3262 </map>
3014 <key>FlycamAxisDeadZone4</key> 3263 <key>FlycamAxisDeadZone4</key>
3015 <map> 3264 <map>
3016 <key>Comment</key> 3265 <key>Comment</key>
3017 <string>Flycam axis 4 dead zone.</string> 3266 <string>Flycam axis 4 dead zone.</string>
3018 <key>Persist</key> 3267 <key>Persist</key>
3019 <integer>1</integer> 3268 <integer>1</integer>
3020 <key>Type</key> 3269 <key>Type</key>
3021 <string>F32</string> 3270 <string>F32</string>
3022 <key>Value</key> 3271 <key>Value</key>
3023 <real>0.1</real> 3272 <real>0.1</real>
3024 </map> 3273 </map>
3025 <key>FlycamAxisDeadZone5</key> 3274 <key>FlycamAxisDeadZone5</key>
3026 <map> 3275 <map>
3027 <key>Comment</key> 3276 <key>Comment</key>
3028 <string>Flycam axis 5 dead zone.</string> 3277 <string>Flycam axis 5 dead zone.</string>
3029 <key>Persist</key> 3278 <key>Persist</key>
3030 <integer>1</integer> 3279 <integer>1</integer>
3031 <key>Type</key> 3280 <key>Type</key>
3032 <string>F32</string> 3281 <string>F32</string>
3033 <key>Value</key> 3282 <key>Value</key>
3034 <real>0.1</real> 3283 <real>0.1</real>
3035 </map> 3284 </map>
3036 <key>FlycamAxisDeadZone6</key> 3285 <key>FlycamAxisDeadZone6</key>
3037 <map> 3286 <map>
3038 <key>Comment</key> 3287 <key>Comment</key>
3039 <string>Flycam axis 6 dead zone.</string> 3288 <string>Flycam axis 6 dead zone.</string>
3040 <key>Persist</key> 3289 <key>Persist</key>
3041 <integer>1</integer> 3290 <integer>1</integer>
3042 <key>Type</key> 3291 <key>Type</key>
3043 <string>F32</string> 3292 <string>F32</string>
3044 <key>Value</key> 3293 <key>Value</key>
3045 <real>0.1</real> 3294 <real>0.1</real>
3046 </map> 3295 </map>
3047 <key>FlycamAxisScale0</key> 3296 <key>FlycamAxisScale0</key>
3048 <map> 3297 <map>
3049 <key>Comment</key> 3298 <key>Comment</key>
3050 <string>Flycam axis 0 scaler.</string> 3299 <string>Flycam axis 0 scaler.</string>
3051 <key>Persist</key> 3300 <key>Persist</key>
3052 <integer>1</integer> 3301 <integer>1</integer>
3053 <key>Type</key> 3302 <key>Type</key>
3054 <string>F32</string> 3303 <string>F32</string>
3055 <key>Value</key> 3304 <key>Value</key>
3056 <real>1</real> 3305 <real>1.0</real>
3057 </map> 3306 </map>
3058 <key>FlycamAxisScale1</key> 3307 <key>FlycamAxisScale1</key>
3059 <map> 3308 <map>
3060 <key>Comment</key> 3309 <key>Comment</key>
3061 <string>Flycam axis 1 scaler.</string> 3310 <string>Flycam axis 1 scaler.</string>
3062 <key>Persist</key> 3311 <key>Persist</key>
3063 <integer>1</integer> 3312 <integer>1</integer>
3064 <key>Type</key> 3313 <key>Type</key>
3065 <string>F32</string> 3314 <string>F32</string>
3066 <key>Value</key> 3315 <key>Value</key>
3067 <real>1</real> 3316 <real>1.0</real>
3068 </map> 3317 </map>
3069 <key>FlycamAxisScale2</key> 3318 <key>FlycamAxisScale2</key>
3070 <map> 3319 <map>
3071 <key>Comment</key> 3320 <key>Comment</key>
3072 <string>Flycam axis 2 scaler.</string> 3321 <string>Flycam axis 2 scaler.</string>
3073 <key>Persist</key> 3322 <key>Persist</key>
3074 <integer>1</integer> 3323 <integer>1</integer>
3075 <key>Type</key> 3324 <key>Type</key>
3076 <string>F32</string> 3325 <string>F32</string>
3077 <key>Value</key> 3326 <key>Value</key>
3078 <real>1</real> 3327 <real>1.0</real>
3079 </map> 3328 </map>
3080 <key>FlycamAxisScale3</key> 3329 <key>FlycamAxisScale3</key>
3081 <map> 3330 <map>
3082 <key>Comment</key> 3331 <key>Comment</key>
3083 <string>Flycam axis 3 scaler.</string> 3332 <string>Flycam axis 3 scaler.</string>
3084 <key>Persist</key> 3333 <key>Persist</key>
3085 <integer>1</integer> 3334 <integer>1</integer>
3086 <key>Type</key> 3335 <key>Type</key>
3087 <string>F32</string> 3336 <string>F32</string>
3088 <key>Value</key> 3337 <key>Value</key>
3089 <real>1</real> 3338 <real>1.0</real>
3090 </map> 3339 </map>
3091 <key>FlycamAxisScale4</key> 3340 <key>FlycamAxisScale4</key>
3092 <map> 3341 <map>
3093 <key>Comment</key> 3342 <key>Comment</key>
3094 <string>Flycam axis 4 scaler.</string> 3343 <string>Flycam axis 4 scaler.</string>
3095 <key>Persist</key> 3344 <key>Persist</key>
3096 <integer>1</integer> 3345 <integer>1</integer>
3097 <key>Type</key> 3346 <key>Type</key>
3098 <string>F32</string> 3347 <string>F32</string>
3099 <key>Value</key> 3348 <key>Value</key>
3100 <real>1</real> 3349 <real>1.0</real>
3101 </map> 3350 </map>
3102 <key>FlycamAxisScale5</key> 3351 <key>FlycamAxisScale5</key>
3103 <map> 3352 <map>
3104 <key>Comment</key> 3353 <key>Comment</key>
3105 <string>Flycam axis 5 scaler.</string> 3354 <string>Flycam axis 5 scaler.</string>
3106 <key>Persist</key> 3355 <key>Persist</key>
3107 <integer>1</integer> 3356 <integer>1</integer>
3108 <key>Type</key> 3357 <key>Type</key>
3109 <string>F32</string> 3358 <string>F32</string>
3110 <key>Value</key> 3359 <key>Value</key>
3111 <real>1</real> 3360 <real>1.0</real>
3112 </map> 3361 </map>
3113 <key>FlycamAxisScale6</key> 3362 <key>FlycamAxisScale6</key>
3114 <map> 3363 <map>
3115 <key>Comment</key> 3364 <key>Comment</key>
3116 <string>Flycam axis 6 scaler.</string> 3365 <string>Flycam axis 6 scaler.</string>
3117 <key>Persist</key> 3366 <key>Persist</key>
3118 <integer>1</integer> 3367 <integer>1</integer>
3119 <key>Type</key> 3368 <key>Type</key>
3120 <string>F32</string> 3369 <string>F32</string>
3121 <key>Value</key> 3370 <key>Value</key>
3122 <real>1</real> 3371 <real>1.0</real>
3123 </map> 3372 </map>
3124 <key>FlycamFeathering</key> 3373 <key>FlycamFeathering</key>
3125 <map> 3374 <map>
3126 <key>Comment</key> 3375 <key>Comment</key>
3127 <string>Flycam feathering (less is softer)</string> 3376 <string>Flycam feathering (less is softer)</string>
3128 <key>Persist</key> 3377 <key>Persist</key>
3129 <integer>1</integer> 3378 <integer>1</integer>
3130 <key>Type</key> 3379 <key>Type</key>
3131 <string>F32</string> 3380 <string>F32</string>
3132 <key>Value</key> 3381 <key>Value</key>
3133 <real>16</real> 3382 <real>16.0</real>
3134 </map> 3383 </map>
3135 <key>FlycamZoomDirect</key> 3384 <key>FlycamZoomDirect</key>
3136 <map> 3385 <map>
3137 <key>Comment</key> 3386 <key>Comment</key>
3138 <string>Map flycam zoom axis directly to camera zoom.</string> 3387 <string>Map flycam zoom axis directly to camera zoom.</string>
3139 <key>Persist</key> 3388 <key>Persist</key>
3140 <integer>1</integer> 3389 <integer>1</integer>
3141 <key>Type</key> 3390 <key>Type</key>
3142 <string>Boolean</string> 3391 <string>Boolean</string>
3143 <key>Value</key> 3392 <key>Value</key>
3144 <integer>0</integer> 3393 <integer>0</integer>
3145 </map> 3394 </map>
3146 <key>FlyingAtExit</key> 3395 <key>FlyingAtExit</key>
3147 <map> 3396 <map>
3148 <key>Comment</key> 3397 <key>Comment</key>
3149 <string>Was flying when last logged out, so fly when logging in</string> 3398 <string>Was flying when last logged out, so fly when logging in</string>
3150 <key>Persist</key> 3399 <key>Persist</key>
3151 <integer>1</integer> 3400 <integer>1</integer>
3152 <key>Type</key> 3401 <key>Type</key>
3153 <string>Boolean</string> 3402 <string>Boolean</string>
3154 <key>Value</key> 3403 <key>Value</key>
3155 <integer>0</integer> 3404 <integer>0</integer>
3156 </map> 3405 </map>
3157 <key>FocusOffsetDefault</key> 3406 <key>FocusOffsetDefault</key>
3158 <map> 3407 <map>
3159 <key>Comment</key> 3408 <key>Comment</key>
3160 <string>Default focus point offset relative to avatar (x-axis is forward)</string> 3409 <string>Default focus point offset relative to avatar (x-axis is forward)</string>
3161 <key>Persist</key> 3410 <key>Persist</key>
3162 <integer>1</integer> 3411 <integer>1</integer>
3163 <key>Type</key> 3412 <key>Type</key>
3164 <string>Vector3</string> 3413 <string>Vector3</string>
3165 <key>Value</key> 3414 <key>Value</key>
3166 <array> 3415 <array>
3167 <real>1</real> 3416 <real>1.0</real>
3168 <real>0</real> 3417 <real>0.0</real>
3169 <real>1</real> 3418 <real>1.0</real>
3170 </array> 3419 </array>
3171 </map> 3420 </map>
3172 <key>FocusPosOnLogout</key> 3421 <key>FocusPosOnLogout</key>
3173 <map> 3422 <map>
3174 <key>Comment</key> 3423 <key>Comment</key>
3175 <string>Camera focus point when last logged out (global coordinates)</string> 3424 <string>Camera focus point when last logged out (global coordinates)</string>
3176 <key>Persist</key> 3425 <key>Persist</key>
3177 <integer>1</integer> 3426 <integer>1</integer>
3178 <key>Type</key> 3427 <key>Type</key>
3179 <string>Vector3D</string> 3428 <string>Vector3D</string>
3180 <key>Value</key> 3429 <key>Value</key>
3181 <array> 3430 <array>
3182 <real>0</real> 3431 <real>0.0</real>
3183 <real>0</real> 3432 <real>0.0</real>
3184 <real>0</real> 3433 <real>0.0</real>
3185 </array> 3434 </array>
3186 </map> 3435 </map>
3187 <key>FolderAutoOpenDelay</key> 3436 <key>FolderAutoOpenDelay</key>
3188 <map> 3437 <map>
3189 <key>Comment</key> 3438 <key>Comment</key>
3190 <string>Seconds before automatically expanding the folder under the mouse when performing inventory drag and drop</string> 3439 <string>Seconds before automatically expanding the folder under the mouse when performing inventory drag and drop</string>
3191 <key>Persist</key> 3440 <key>Persist</key>
3192 <integer>1</integer> 3441 <integer>1</integer>
3193 <key>Type</key> 3442 <key>Type</key>
3194 <string>F32</string> 3443 <string>F32</string>
3195 <key>Value</key> 3444 <key>Value</key>
3196 <real>0.75</real> 3445 <real>0.75</real>
3197 </map> 3446 </map>
3198 <key>FolderLoadingMessageWaitTime</key> 3447 <key>FolderLoadingMessageWaitTime</key>
3199 <map> 3448 <map>
3200 <key>Comment</key> 3449 <key>Comment</key>
3201 <string>Seconds to wait before showing the LOADING... text in folder views</string> 3450 <string>Seconds to wait before showing the LOADING... text in folder views</string>
3202 <key>Persist</key> 3451 <key>Persist</key>
3203 <integer>1</integer> 3452 <integer>1</integer>
3204 <key>Type</key> 3453 <key>Type</key>
3205 <string>F32</string> 3454 <string>F32</string>
3206 <key>Value</key> 3455 <key>Value</key>
3207 <real>0.5</real> 3456 <real>0.5</real>
3208 </map> 3457 </map>
3209 <key>FontMonospace</key> 3458 <key>FontMonospace</key>
3210 <map> 3459 <map>
3211 <key>Comment</key> 3460 <key>Comment</key>
3212 <string>Name of monospace font (Truetype file name)</string> 3461 <string>Name of monospace font (Truetype file name)</string>
3213 <key>Persist</key> 3462 <key>Persist</key>
3214 <integer>1</integer> 3463 <integer>1</integer>
3215 <key>Type</key> 3464 <key>Type</key>
3216 <string>String</string> 3465 <string>String</string>
3217 <key>Value</key> 3466 <key>Value</key>
3218 <string>profontwindows.ttf</string> 3467 <string>profontwindows.ttf</string>
3219 </map> 3468 </map>
3220 <key>FontSansSerif</key> 3469 <key>FontSansSerif</key>
3221 <map> 3470 <map>
3222 <key>Comment</key> 3471 <key>Comment</key>
3223 <string>Name of san-serif font (Truetype file name)</string> 3472 <string>Name of san-serif font (Truetype file name)</string>
3224 <key>Persist</key> 3473 <key>Persist</key>
3225 <integer>1</integer> 3474 <integer>1</integer>
3226 <key>Type</key> 3475 <key>Type</key>
3227 <string>String</string> 3476 <string>String</string>
3228 <key>Value</key> 3477 <key>Value</key>
3229 <string>MtBkLfRg.ttf</string> 3478 <string>MtBkLfRg.ttf</string>
3230 </map> 3479 </map>
3231 <key>FontSansSerifBold</key> 3480 <key>FontSansSerifBold</key>
3232 <map> 3481 <map>
3233 <key>Comment</key> 3482 <key>Comment</key>
3234 <string>Name of bold font (Truetype file name)</string> 3483 <string>Name of bold font (Truetype file name)</string>
3235 <key>Persist</key> 3484 <key>Persist</key>
3236 <integer>1</integer> 3485 <integer>1</integer>
3237 <key>Type</key> 3486 <key>Type</key>
3238 <string>String</string> 3487 <string>String</string>
3239 <key>Value</key> 3488 <key>Value</key>
3240 <string>MtBdLfRg.ttf</string> 3489 <string>MtBdLfRg.ttf</string>
3241 </map> 3490 </map>
3242 <key>FontSansSerifFallback</key> 3491 <key>FontSansSerifFallback</key>
3243 <map> 3492 <map>
3244 <key>Comment</key> 3493 <key>Comment</key>
3245 <string>Name of san-serif font (Truetype file name)</string> 3494 <string>Name of san-serif font (Truetype file name)</string>
3246 <key>Persist</key> 3495 <key>Persist</key>
3247 <integer>1</integer> 3496 <integer>1</integer>
3248 <key>Type</key> 3497 <key>Type</key>
3249 <string>String</string> 3498 <string>String</string>
3250 <key>Value</key> 3499 <key>Value</key>
3251 <string></string> 3500 <string />
3252 </map> 3501 </map>
3253 <key>FontSansSerifFallbackScale</key> 3502 <key>FontSansSerifFallbackScale</key>
3254 <map> 3503 <map>
3255 <key>Comment</key> 3504 <key>Comment</key>
3256 <string>Scale of fallback font relative to huge font (fraction of huge font size)</string> 3505 <string>Scale of fallback font relative to huge font (fraction of huge font size)</string>
3257 <key>Persist</key> 3506 <key>Persist</key>
3258 <integer>1</integer> 3507 <integer>1</integer>
3259 <key>Type</key> 3508 <key>Type</key>
3260 <string>F32</string> 3509 <string>F32</string>
3261 <key>Value</key> 3510 <key>Value</key>
3262 <real>1</real> 3511 <real>1.0</real>
3263 </map> 3512 </map>
3264 <key>FontScreenDPI</key> 3513 <key>FontScreenDPI</key>
3265 <map> 3514 <map>
3266 <key>Comment</key> 3515 <key>Comment</key>
3267 <string>Font resolution, higher is bigger (pixels per inch)</string> 3516 <string>Font resolution, higher is bigger (pixels per inch)</string>
3268 <key>Persist</key> 3517 <key>Persist</key>
3269 <integer>1</integer> 3518 <integer>1</integer>
3270 <key>Type</key> 3519 <key>Type</key>
3271 <string>F32</string> 3520 <string>F32</string>
3272 <key>Value</key> 3521 <key>Value</key>
3273 <real>96</real> 3522 <real>96.0</real>
3274 </map> 3523 </map>
3275 <key>FontSizeHuge</key> 3524 <key>FontSizeHuge</key>
3276 <map> 3525 <map>
3277 <key>Comment</key> 3526 <key>Comment</key>
3278 <string>Size of huge font (points, or 1/72 of an inch)</string> 3527 <string>Size of huge font (points, or 1/72 of an inch)</string>
3279 <key>Persist</key> 3528 <key>Persist</key>
3280 <integer>1</integer> 3529 <integer>1</integer>
3281 <key>Type</key> 3530 <key>Type</key>
3282 <string>F32</string> 3531 <string>F32</string>
3283 <key>Value</key> 3532 <key>Value</key>
3284 <real>16</real> 3533 <real>16.0</real>
3285 </map> 3534 </map>
3286 <key>FontSizeLarge</key> 3535 <key>FontSizeLarge</key>
3287 <map> 3536 <map>
3288 <key>Comment</key> 3537 <key>Comment</key>
3289 <string>Size of large font (points, or 1/72 of an inch)</string> 3538 <string>Size of large font (points, or 1/72 of an inch)</string>
3290 <key>Persist</key> 3539 <key>Persist</key>
3291 <integer>1</integer> 3540 <integer>1</integer>
3292 <key>Type</key> 3541 <key>Type</key>
3293 <string>F32</string> 3542 <string>F32</string>
3294 <key>Value</key> 3543 <key>Value</key>
3295 <real>12</real> 3544 <real>12.0</real>
3296 </map> 3545 </map>
3297 <key>FontSizeMedium</key> 3546 <key>FontSizeMedium</key>
3298 <map> 3547 <map>
3299 <key>Comment</key> 3548 <key>Comment</key>
3300 <string>Size of medium font (points, or 1/72 of an inch)</string> 3549 <string>Size of medium font (points, or 1/72 of an inch)</string>
3301 <key>Persist</key> 3550 <key>Persist</key>
3302 <integer>1</integer> 3551 <integer>1</integer>
3303 <key>Type</key> 3552 <key>Type</key>
3304 <string>F32</string> 3553 <string>F32</string>
3305 <key>Value</key> 3554 <key>Value</key>
3306 <real>10</real> 3555 <real>10.0</real>
3307 </map> 3556 </map>
3308 <key>FontSizeMonospace</key> 3557 <key>FontSizeMonospace</key>
3309 <map> 3558 <map>
3310 <key>Comment</key> 3559 <key>Comment</key>
3311 <string>Size of monospaced font (points, or 1/72 of an inch)</string> 3560 <string>Size of monospaced font (points, or 1/72 of an inch)</string>
3312 <key>Persist</key> 3561 <key>Persist</key>
3313 <integer>1</integer> 3562 <integer>1</integer>
3314 <key>Type</key> 3563 <key>Type</key>
3315 <string>F32</string> 3564 <string>F32</string>
3316 <key>Value</key> 3565 <key>Value</key>
3317 <real>9</real> 3566 <real>9.0</real>
3318 </map> 3567 </map>
3319 <key>FontSizeSmall</key> 3568 <key>FontSizeSmall</key>
3320 <map> 3569 <map>
3321 <key>Comment</key> 3570 <key>Comment</key>
3322 <string>Size of small font (points, or 1/72 of an inch)</string> 3571 <string>Size of small font (points, or 1/72 of an inch)</string>
3323 <key>Persist</key> 3572 <key>Persist</key>
3324 <integer>1</integer> 3573 <integer>1</integer>
3325 <key>Type</key> 3574 <key>Type</key>
3326 <string>F32</string> 3575 <string>F32</string>
3327 <key>Value</key> 3576 <key>Value</key>
3328 <real>9</real> 3577 <real>9.0</real>
3329 </map> 3578 </map>
3330 <key>ForceShowGrid</key> 3579 <key>ForceShowGrid</key>
3331 <map> 3580 <map>
3332 <key>Comment</key> 3581 <key>Comment</key>
3333 <string>Always show grid dropdown on login screen</string> 3582 <string>Always show grid dropdown on login screen</string>
3334 <key>Persist</key> 3583 <key>Persist</key>
3335 <integer>1</integer> 3584 <integer>1</integer>
3336 <key>Type</key> 3585 <key>Type</key>
3337 <string>Boolean</string> 3586 <string>Boolean</string>
3338 <key>Value</key> 3587 <key>Value</key>
3339 <integer>0</integer> 3588 <integer>0</integer>
3340 </map> 3589 </map>
3341 <key>ForwardBtnRect</key> 3590 <key>ForwardBtnRect</key>
3342 <map> 3591 <map>
3343 <key>Comment</key> 3592 <key>Comment</key>
3344 <string /> 3593 <string />
3345 <key>Persist</key> 3594 <key>Persist</key>
3346 <integer>0</integer> 3595 <integer>0</integer>
3347 <key>Type</key> 3596 <key>Type</key>
3348 <string>Rect</string> 3597 <string>Rect</string>
3349 <key>Value</key> 3598 <key>Value</key>
3350 <array> 3599 <array>
3351 <integer>45</integer> 3600 <integer>45</integer>
3352 <integer>54</integer> 3601 <integer>54</integer>
3353 <integer>66</integer> 3602 <integer>66</integer>
3354 <integer>29</integer> 3603 <integer>29</integer>
3355 </array> 3604 </array>
3356 </map> 3605 </map>
3357 <key>FreezeTime</key> 3606 <key>FreezeTime</key>
3358 <map> 3607 <map>
3359 <key>Comment</key> 3608 <key>Comment</key>
3360 <string /> 3609 <string />
3361 <key>Persist</key> 3610 <key>Persist</key>
3362 <integer>0</integer> 3611 <integer>0</integer>
3363 <key>Type</key> 3612 <key>Type</key>
3364 <string>Boolean</string> 3613 <string>Boolean</string>
3365 <key>Value</key> 3614 <key>Value</key>
3366 <integer>0</integer> 3615 <integer>0</integer>
3367 </map> 3616 </map>
3368 <key>FullScreen</key> 3617 <key>FullScreen</key>
3369 <map> 3618 <map>
3370 <key>Comment</key> 3619 <key>Comment</key>
3371 <string>Run SL in fullscreen mode</string> 3620 <string>Run SL in fullscreen mode</string>
3372 <key>Persist</key> 3621 <key>Persist</key>
3373 <integer>1</integer> 3622 <integer>1</integer>
3374 <key>Type</key> 3623 <key>Type</key>
3375 <string>Boolean</string> 3624 <string>Boolean</string>
3376 <key>Value</key> 3625 <key>Value</key>
3377 <integer>0</integer> 3626 <integer>0</integer>
3378 </map> 3627 </map>
3379 <key>FullScreenAspectRatio</key> 3628 <key>FullScreenAspectRatio</key>
3380 <map> 3629 <map>
3381 <key>Comment</key> 3630 <key>Comment</key>
3382 <string>Aspect ratio of fullscreen display (width / height)</string> 3631 <string>Aspect ratio of fullscreen display (width / height)</string>
3383 <key>Persist</key> 3632 <key>Persist</key>
3384 <integer>1</integer> 3633 <integer>1</integer>
3385 <key>Type</key> 3634 <key>Type</key>
3386 <string>F32</string> 3635 <string>F32</string>
3387 <key>Value</key> 3636 <key>Value</key>
3388 <real>1.33329999446868896484375</real> 3637 <real>1.33329999447</real>
3389 </map> 3638 </map>
3390 <key>FullScreenAutoDetectAspectRatio</key> 3639 <key>FullScreenAutoDetectAspectRatio</key>
3391 <map> 3640 <map>
3392 <key>Comment</key> 3641 <key>Comment</key>
3393 <string>Automatically detect proper aspect ratio for fullscreen display</string> 3642 <string>Automatically detect proper aspect ratio for fullscreen display</string>
3394 <key>Persist</key> 3643 <key>Persist</key>
3395 <integer>1</integer> 3644 <integer>1</integer>
3396 <key>Type</key> 3645 <key>Type</key>
3397 <string>Boolean</string> 3646 <string>Boolean</string>
3398 <key>Value</key> 3647 <key>Value</key>
3399 <integer>1</integer> 3648 <integer>1</integer>
3400 </map> 3649 </map>
3401 <key>FullScreenHeight</key> 3650 <key>FullScreenHeight</key>
3402 <map> 3651 <map>
3403 <key>Comment</key> 3652 <key>Comment</key>
3404 <string>Fullscreen resolution in height</string> 3653 <string>Fullscreen resolution in height</string>
3405 <key>Persist</key> 3654 <key>Persist</key>
3406 <integer>1</integer> 3655 <integer>1</integer>
3407 <key>Type</key> 3656 <key>Type</key>
3408 <string>S32</string> 3657 <string>S32</string>
3409 <key>Value</key> 3658 <key>Value</key>
3410 <integer>768</integer> 3659 <integer>768</integer>
3411 </map> 3660 </map>
3412 <key>FullScreenWidth</key> 3661 <key>FullScreenWidth</key>
3413 <map> 3662 <map>
3414 <key>Comment</key> 3663 <key>Comment</key>
3415 <string>Fullscreen resolution in width</string> 3664 <string>Fullscreen resolution in width</string>
3416 <key>Persist</key> 3665 <key>Persist</key>
3417 <integer>1</integer> 3666 <integer>1</integer>
3418 <key>Type</key> 3667 <key>Type</key>
3419 <string>S32</string> 3668 <string>S32</string>
3420 <key>Value</key> 3669 <key>Value</key>
3421 <integer>1024</integer> 3670 <integer>1024</integer>
3422 </map> 3671 </map>
3423 <key>GridChoice</key>
3424 <map>
3425 <key>Comment</key>
3426 <string>The user&apos;s grid choice or ip address.</string>
3427 <key>Persist</key>
3428 <integer>1</integer>
3429 <key>Type</key>
3430 <string>String</string>
3431 <key>Value</key>
3432 <string />
3433 </map>
3434 <key>GridCrossSections</key> 3672 <key>GridCrossSections</key>
3435 <map> 3673 <map>
3436 <key>Comment</key> 3674 <key>Comment</key>
3437 <string>Highlight cross sections of prims with grid manipulation plane.</string> 3675 <string>Highlight cross sections of prims with grid manipulation plane.</string>
3438 <key>Persist</key> 3676 <key>Persist</key>
3439 <integer>1</integer> 3677 <integer>1</integer>
3440 <key>Type</key> 3678 <key>Type</key>
3441 <string>Boolean</string> 3679 <string>Boolean</string>
3442 <key>Value</key> 3680 <key>Value</key>
3443 <integer>0</integer> 3681 <integer>0</integer>
3444 </map> 3682 </map>
3445 <key>GridDrawSize</key> 3683 <key>GridDrawSize</key>
3446 <map> 3684 <map>
3447 <key>Comment</key> 3685 <key>Comment</key>
3448 <string>Visible extent of 2D snap grid (meters)</string> 3686 <string>Visible extent of 2D snap grid (meters)</string>
3449 <key>Persist</key> 3687 <key>Persist</key>
3450 <integer>1</integer> 3688 <integer>1</integer>
3451 <key>Type</key> 3689 <key>Type</key>
3452 <string>F32</string> 3690 <string>F32</string>
3453 <key>Value</key> 3691 <key>Value</key>
3454 <real>12</real> 3692 <real>12.0</real>
3455 </map> 3693 </map>
3456 <key>GridMode</key> 3694 <key>GridMode</key>
3457 <map> 3695 <map>
3458 <key>Comment</key> 3696 <key>Comment</key>
3459 <string>Snap grid reference frame (0 = world, 1 = local, 2 = reference object)</string> 3697 <string>Snap grid reference frame (0 = world, 1 = local, 2 = reference object)</string>
3460 <key>Persist</key> 3698 <key>Persist</key>
3461 <integer>1</integer> 3699 <integer>1</integer>
3462 <key>Type</key> 3700 <key>Type</key>
3463 <string>S32</string> 3701 <string>S32</string>
3464 <key>Value</key> 3702 <key>Value</key>
3465 <integer>0</integer> 3703 <integer>0</integer>
3466 </map> 3704 </map>
3467 <key>GridOpacity</key> 3705 <key>GridOpacity</key>
3468 <map> 3706 <map>
3469 <key>Comment</key> 3707 <key>Comment</key>
3470 <string>Grid line opacity (0.0 = completely transparent, 1.0 = completely opaque)</string> 3708 <string>Grid line opacity (0.0 = completely transparent, 1.0 = completely opaque)</string>
3471 <key>Persist</key> 3709 <key>Persist</key>
3472 <integer>1</integer> 3710 <integer>1</integer>
3473 <key>Type</key> 3711 <key>Type</key>
3474 <string>F32</string> 3712 <string>F32</string>
3475 <key>Value</key> 3713 <key>Value</key>
3476 <real>0.699999988079071044921875</real> 3714 <real>0.699999988079</real>
3477 </map> 3715 </map>
3478 <key>GridResolution</key> 3716 <key>GridResolution</key>
3479 <map> 3717 <map>
3480 <key>Comment</key> 3718 <key>Comment</key>
3481 <string>Size of single grid step (meters)</string> 3719 <string>Size of single grid step (meters)</string>
3482 <key>Persist</key> 3720 <key>Persist</key>
3483 <integer>1</integer> 3721 <integer>1</integer>
3484 <key>Type</key> 3722 <key>Type</key>
3485 <string>F32</string> 3723 <string>F32</string>
3486 <key>Value</key> 3724 <key>Value</key>
3487 <real>0.5</real> 3725 <real>0.5</real>
3488 </map> 3726 </map>
3489 <key>GridSubUnit</key> 3727 <key>GridSubUnit</key>
3490 <map> 3728 <map>
3491 <key>Comment</key> 3729 <key>Comment</key>
3492 <string>Display fractional grid steps, relative to grid size</string> 3730 <string>Display fractional grid steps, relative to grid size</string>
3493 <key>Persist</key> 3731 <key>Persist</key>
3494 <integer>1</integer> 3732 <integer>1</integer>
3495 <key>Type</key> 3733 <key>Type</key>
3496 <string>Boolean</string> 3734 <string>Boolean</string>
3497 <key>Value</key> 3735 <key>Value</key>
3498 <integer>0</integer> 3736 <integer>0</integer>
3499 </map> 3737 </map>
3500 <key>GridSubdivision</key> 3738 <key>GridSubdivision</key>
3501 <map> 3739 <map>
3502 <key>Comment</key> 3740 <key>Comment</key>
3503 <string>Maximum number of times to divide single snap grid unit when GridSubUnit is true</string> 3741 <string>Maximum number of times to divide single snap grid unit when GridSubUnit is true</string>
3504 <key>Persist</key> 3742 <key>Persist</key>
3505 <integer>1</integer> 3743 <integer>1</integer>
3506 <key>Type</key> 3744 <key>Type</key>
3507 <string>S32</string> 3745 <string>S32</string>
3508 <key>Value</key> 3746 <key>Value</key>
3509 <integer>32</integer> 3747 <integer>32</integer>
3510 </map> 3748 </map>
3511 <key>GroupNotifyBoxHeight</key> 3749 <key>GroupNotifyBoxHeight</key>
3512 <map> 3750 <map>
3513 <key>Comment</key> 3751 <key>Comment</key>
3514 <string>Height of group notice messages</string> 3752 <string>Height of group notice messages</string>
3515 <key>Persist</key> 3753 <key>Persist</key>
3516 <integer>1</integer> 3754 <integer>1</integer>
3517 <key>Type</key> 3755 <key>Type</key>
3518 <string>S32</string> 3756 <string>S32</string>
3519 <key>Value</key> 3757 <key>Value</key>
3520 <integer>260</integer> 3758 <integer>260</integer>
3521 </map> 3759 </map>
3522 <key>GroupNotifyBoxWidth</key> 3760 <key>GroupNotifyBoxWidth</key>
3523 <map> 3761 <map>
3524 <key>Comment</key> 3762 <key>Comment</key>
3525 <string>Width of group notice messages</string> 3763 <string>Width of group notice messages</string>
3526 <key>Persist</key> 3764 <key>Persist</key>
3527 <integer>1</integer> 3765 <integer>1</integer>
3528 <key>Type</key> 3766 <key>Type</key>
3529 <string>S32</string> 3767 <string>S32</string>
3530 <key>Value</key> 3768 <key>Value</key>
3531 <integer>400</integer> 3769 <integer>400</integer>
3532 </map> 3770 </map>
3533 <key>HTMLLinkColor</key> 3771 <key>HTMLLinkColor</key>
3534 <map> 3772 <map>
3535 <key>Comment</key> 3773 <key>Comment</key>
3536 <string>Color of hyperlinks</string> 3774 <string>Color of hyperlinks</string>
3537 <key>Persist</key> 3775 <key>Persist</key>
3538 <integer>1</integer> 3776 <integer>1</integer>
3539 <key>Type</key> 3777 <key>Type</key>
3540 <string>Color4</string> 3778 <string>Color4</string>
3541 <key>Value</key> 3779 <key>Value</key>
3542 <array> 3780 <array>
3543 <real>0.60000002384185791015625</real> 3781 <real>0.600000023842</real>
3544 <real>0.60000002384185791015625</real> 3782 <real>0.600000023842</real>
3545 <real>1</real> 3783 <real>1.0</real>
3546 <real>1</real> 3784 <real>1.0</real>
3547 </array> 3785 </array>
3548 </map> 3786 </map>
3549 <key>HelpHomeURL</key> 3787 <key>HelpHomeURL</key>
3550 <map> 3788 <map>
3551 <key>Comment</key> 3789 <key>Comment</key>
3552 <string>URL of initial help page</string> 3790 <string>URL of initial help page</string>
3553 <key>Persist</key> 3791 <key>Persist</key>
3554 <integer>1</integer> 3792 <integer>1</integer>
3555 <key>Type</key> 3793 <key>Type</key>
3556 <string>String</string> 3794 <string>String</string>
3557 <key>Value</key> 3795 <key>Value</key>
3558 <string>help/index.html</string> 3796 <string>help/index.html</string>
3559 </map> 3797 </map>
3560 <key>HelpLastVisitedURL</key> 3798 <key>HelpLastVisitedURL</key>
3561 <map> 3799 <map>
3562 <key>Comment</key> 3800 <key>Comment</key>
3563 <string>URL of last help page, will be shown next time help is accessed</string> 3801 <string>URL of last help page, will be shown next time help is accessed</string>
3564 <key>Persist</key> 3802 <key>Persist</key>
3565 <integer>1</integer> 3803 <integer>1</integer>
3566 <key>Type</key> 3804 <key>Type</key>
3567 <string>String</string> 3805 <string>String</string>
3568 <key>Value</key> 3806 <key>Value</key>
3569 <string>help/index.html</string> 3807 <string>help/index.html</string>
3570 </map> 3808 </map>
3571 <key>HelperURI</key>
3572 <map>
3573 <key>Comment</key>
3574 <string>helper web CGI prefix to use</string>
3575 <key>Persist</key>
3576 <integer>1</integer>
3577 <key>Type</key>
3578 <string>String</string>
3579 <key>Value</key>
3580 <string />
3581 </map>
3582 <key>HighResSnapshot</key> 3809 <key>HighResSnapshot</key>
3583 <map> 3810 <map>
3584 <key>Comment</key> 3811 <key>Comment</key>
3585 <string>Double resolution of snapshot from current window resolution</string> 3812 <string>Double resolution of snapshot from current window resolution</string>
3586 <key>Persist</key> 3813 <key>Persist</key>
3587 <integer>1</integer> 3814 <integer>1</integer>
3588 <key>Type</key> 3815 <key>Type</key>
3589 <string>Boolean</string> 3816 <string>Boolean</string>
3590 <key>Value</key> 3817 <key>Value</key>
3591 <integer>0</integer> 3818 <integer>0</integer>
3592 </map> 3819 </map>
3593 <key>HtmlFindRect</key> 3820 <key>HtmlFindRect</key>
3594 <map> 3821 <map>
3595 <key>Comment</key> 3822 <key>Comment</key>
3596 <string>Rectangle for HTML find window</string> 3823 <string>Rectangle for HTML find window</string>
3597 <key>Persist</key> 3824 <key>Persist</key>
3598 <integer>1</integer> 3825 <integer>1</integer>
3599 <key>Type</key> 3826 <key>Type</key>
3600 <string>Rect</string> 3827 <string>Rect</string>
3601 <key>Value</key> 3828 <key>Value</key>
3602 <array> 3829 <array>
3603 <integer>16</integer> 3830 <integer>16</integer>
3604 <integer>650</integer> 3831 <integer>650</integer>
3605 <integer>600</integer> 3832 <integer>600</integer>
3606 <integer>128</integer> 3833 <integer>128</integer>
3607 </array> 3834 </array>
3608 </map> 3835 </map>
3609 <key>HtmlHelpLastPage</key> 3836 <key>HtmlHelpLastPage</key>
3610 <map> 3837 <map>
3611 <key>Comment</key> 3838 <key>Comment</key>
3612 <string>Last URL visited via help system</string> 3839 <string>Last URL visited via help system</string>
3613 <key>Persist</key> 3840 <key>Persist</key>
3614 <integer>1</integer> 3841 <integer>1</integer>
3615 <key>Type</key> 3842 <key>Type</key>
3616 <string>String</string> 3843 <string>String</string>
3617 <key>Value</key> 3844 <key>Value</key>
3618 <string /> 3845 <string />
3619 </map> 3846 </map>
3620 <key>HtmlHelpRect</key> 3847 <key>HtmlHelpRect</key>
3621 <map> 3848 <map>
3622 <key>Comment</key> 3849 <key>Comment</key>
3623 <string>Rectangle for HTML help window</string> 3850 <string>Rectangle for HTML help window</string>
3624 <key>Persist</key> 3851 <key>Persist</key>
3625 <integer>1</integer> 3852 <integer>1</integer>
3626 <key>Type</key> 3853 <key>Type</key>
3627 <string>Rect</string> 3854 <string>Rect</string>
3628 <key>Value</key> 3855 <key>Value</key>
3629 <array> 3856 <array>
3630 <integer>16</integer> 3857 <integer>16</integer>
3631 <integer>650</integer> 3858 <integer>650</integer>
3632 <integer>600</integer> 3859 <integer>600</integer>
3633 <integer>128</integer> 3860 <integer>128</integer>
3634 </array> 3861 </array>
3635 </map> 3862 </map>
3636 <key>HtmlReleaseMessage</key> 3863 <key>HtmlReleaseMessage</key>
3637 <map> 3864 <map>
3638 <key>Comment</key> 3865 <key>Comment</key>
3639 <string>Rectangle for HTML Release Message Floater window</string> 3866 <string>Rectangle for HTML Release Message Floater window</string>
3640 <key>Persist</key> 3867 <key>Persist</key>
3641 <integer>1</integer> 3868 <integer>1</integer>
3642 <key>Type</key> 3869 <key>Type</key>
3643 <string>Rect</string> 3870 <string>Rect</string>
3644 <key>Value</key> 3871 <key>Value</key>
3645 <array> 3872 <array>
3646 <integer>46</integer> 3873 <integer>46</integer>
3647 <integer>520</integer> 3874 <integer>520</integer>
3648 <integer>400</integer> 3875 <integer>400</integer>
3649 <integer>128</integer> 3876 <integer>128</integer>
3650 </array> 3877 </array>
3651 </map> 3878 </map>
3879 <key>IMChatColor</key>
3880 <map>
3881 <key>Comment</key>
3882 <string>Color of instant messages from other residents</string>
3883 <key>Persist</key>
3884 <integer>1</integer>
3885 <key>Type</key>
3886 <string>Color4</string>
3887 <key>Value</key>
3888 <array>
3889 <real>1.0</real>
3890 <real>1.0</real>
3891 <real>1.0</real>
3892 <real>1.0</real>
3893 </array>
3894 </map>
3652 <key>IMInChatHistory</key> 3895 <key>IMInChatHistory</key>
3653 <map> 3896 <map>
3654 <key>Comment</key> 3897 <key>Comment</key>
3655 <string>Copy IM into chat history</string> 3898 <string>Copy IM into chat history</string>
3656 <key>Persist</key> 3899 <key>Persist</key>
3657 <integer>1</integer> 3900 <integer>1</integer>
3658 <key>Type</key> 3901 <key>Type</key>
3659 <string>Boolean</string> 3902 <string>Boolean</string>
3660 <key>Value</key> 3903 <key>Value</key>
3661 <integer>0</integer> 3904 <integer>0</integer>
3662 </map> 3905 </map>
3663 <key>IMShowTimestamps</key> 3906 <key>IMShowTimestamps</key>
3664 <map> 3907 <map>
3665 <key>Comment</key> 3908 <key>Comment</key>
3666 <string>Show timestamps in IM</string> 3909 <string>Show timestamps in IM</string>
3667 <key>Persist</key> 3910 <key>Persist</key>
3668 <integer>1</integer> 3911 <integer>1</integer>
3669 <key>Type</key> 3912 <key>Type</key>
3670 <string>Boolean</string> 3913 <string>Boolean</string>
3671 <key>Value</key> 3914 <key>Value</key>
3672 <integer>1</integer> 3915 <integer>1</integer>
3673 </map> 3916 </map>
3674 <key>IgnorePixelDepth</key> 3917 <key>IgnorePixelDepth</key>
3675 <map> 3918 <map>
3676 <key>Comment</key> 3919 <key>Comment</key>
3677 <string>Ignore pixel depth settings.</string> 3920 <string>Ignore pixel depth settings.</string>
3678 <key>Persist</key> 3921 <key>Persist</key>
3679 <integer>1</integer> 3922 <integer>1</integer>
3680 <key>Type</key> 3923 <key>Type</key>
3681 <string>Boolean</string> 3924 <string>Boolean</string>
3682 <key>Value</key> 3925 <key>Value</key>
3683 <integer>0</integer> 3926 <integer>0</integer>
3684 </map> 3927 </map>
3685 <key>ImagePipelineUseHTTP</key> 3928 <key>ImagePipelineUseHTTP</key>
3686 <map> 3929 <map>
3687 <key>Comment</key> 3930 <key>Comment</key>
3688 <string>If TRUE use HTTP GET to fetch textures from the server</string> 3931 <string>If TRUE use HTTP GET to fetch textures from the server</string>
3689 <key>Persist</key> 3932 <key>Persist</key>
3690 <integer>1</integer> 3933 <integer>1</integer>
3691 <key>Type</key> 3934 <key>Type</key>
3692 <string>Boolean</string> 3935 <string>Boolean</string>
3693 <key>Value</key> 3936 <key>Value</key>
3694 <integer>0</integer> 3937 <integer>0</integer>
3695 </map> 3938 </map>
3696 <key>InBandwidth</key> 3939 <key>InBandwidth</key>
3697 <map> 3940 <map>
3698 <key>Comment</key> 3941 <key>Comment</key>
3699 <string>Incoming bandwidth throttle (bps)</string> 3942 <string>Incoming bandwidth throttle (bps)</string>
3700 <key>Persist</key> 3943 <key>Persist</key>
3701 <integer>1</integer> 3944 <integer>1</integer>
3702 <key>Type</key> 3945 <key>Type</key>
3703 <string>F32</string> 3946 <string>F32</string>
3704 <key>Value</key> 3947 <key>Value</key>
3705 <real>0</real> 3948 <real>0.0</real>
3706 </map> 3949 </map>
3707 <key>InventoryAutoOpenDelay</key> 3950 <key>InventoryAutoOpenDelay</key>
3708 <map> 3951 <map>
3709 <key>Comment</key> 3952 <key>Comment</key>
3710 <string>Seconds before automatically opening inventory when mouse is over inventory button when performing inventory drag and drop</string> 3953 <string>Seconds before automatically opening inventory when mouse is over inventory button when performing inventory drag and drop</string>
3711 <key>Persist</key> 3954 <key>Persist</key>
3712 <integer>1</integer> 3955 <integer>1</integer>
3713 <key>Type</key> 3956 <key>Type</key>
3714 <string>F32</string> 3957 <string>F32</string>
3715 <key>Value</key> 3958 <key>Value</key>
3716 <real>1</real> 3959 <real>1.0</real>
3717 </map> 3960 </map>
3718 <key>InventorySortOrder</key> 3961 <key>InventorySortOrder</key>
3719 <map> 3962 <map>
3720 <key>Comment</key> 3963 <key>Comment</key>
3721 <string>Specifies sort key for inventory items (+0 = name, +1 = date, +2 = folders always by name, +4 = system folders to top)</string> 3964 <string>Specifies sort key for inventory items (+0 = name, +1 = date, +2 = folders always by name, +4 = system folders to top)</string>
3722 <key>Persist</key> 3965 <key>Persist</key>
3723 <integer>1</integer> 3966 <integer>1</integer>
3724 <key>Type</key> 3967 <key>Type</key>
3725 <string>U32</string> 3968 <string>U32</string>
3726 <key>Value</key> 3969 <key>Value</key>
3727 <integer>7</integer> 3970 <integer>7</integer>
3728 </map> 3971 </map>
3729 <key>InvertMouse</key> 3972 <key>InvertMouse</key>
3730 <map> 3973 <map>
3731 <key>Comment</key> 3974 <key>Comment</key>
3732 <string>When in mouselook, moving mouse up looks down and vice verse (FALSE = moving up looks up)</string> 3975 <string>When in mouselook, moving mouse up looks down and vice verse (FALSE = moving up looks up)</string>
3733 <key>Persist</key> 3976 <key>Persist</key>
3734 <integer>1</integer> 3977 <integer>1</integer>
3735 <key>Type</key> 3978 <key>Type</key>
3736 <string>Boolean</string> 3979 <string>Boolean</string>
3737 <key>Value</key> 3980 <key>Value</key>
3738 <integer>0</integer> 3981 <integer>0</integer>
3739 </map> 3982 </map>
3983 <key>JoystickAvatarEnabled</key>
3984 <map>
3985 <key>Comment</key>
3986 <string>Enables the Joystick to control Avatar movmement.</string>
3987 <key>Persist</key>
3988 <integer>1</integer>
3989 <key>Type</key>
3990 <string>Boolean</string>
3991 <key>Value</key>
3992 <string>1</string>
3993 </map>
3994 <key>JoystickAxis0</key>
3995 <map>
3996 <key>Comment</key>
3997 <string>Flycam hardware axis mapping for internal axis 0 ([0, 5]).</string>
3998 <key>Persist</key>
3999 <integer>1</integer>
4000 <key>Type</key>
4001 <string>S32</string>
4002 <key>Value</key>
4003 <integer>1</integer>
4004 </map>
4005 <key>JoystickAxis1</key>
4006 <map>
4007 <key>Comment</key>
4008 <string>Flycam hardware axis mapping for internal axis 1 ([0, 5]).</string>
4009 <key>Persist</key>
4010 <integer>1</integer>
4011 <key>Type</key>
4012 <string>S32</string>
4013 <key>Value</key>
4014 <integer>0</integer>
4015 </map>
4016 <key>JoystickAxis2</key>
4017 <map>
4018 <key>Comment</key>
4019 <string>Flycam hardware axis mapping for internal axis 2 ([0, 5]).</string>
4020 <key>Persist</key>
4021 <integer>1</integer>
4022 <key>Type</key>
4023 <string>S32</string>
4024 <key>Value</key>
4025 <integer>2</integer>
4026 </map>
4027 <key>JoystickAxis3</key>
4028 <map>
4029 <key>Comment</key>
4030 <string>Flycam hardware axis mapping for internal axis 3 ([0, 5]).</string>
4031 <key>Persist</key>
4032 <integer>1</integer>
4033 <key>Type</key>
4034 <string>S32</string>
4035 <key>Value</key>
4036 <integer>4</integer>
4037 </map>
4038 <key>JoystickAxis4</key>
4039 <map>
4040 <key>Comment</key>
4041 <string>Flycam hardware axis mapping for internal axis 4 ([0, 5]).</string>
4042 <key>Persist</key>
4043 <integer>1</integer>
4044 <key>Type</key>
4045 <string>S32</string>
4046 <key>Value</key>
4047 <integer>3</integer>
4048 </map>
4049 <key>JoystickAxis5</key>
4050 <map>
4051 <key>Comment</key>
4052 <string>Flycam hardware axis mapping for internal axis 5 ([0, 5]).</string>
4053 <key>Persist</key>
4054 <integer>1</integer>
4055 <key>Type</key>
4056 <string>S32</string>
4057 <key>Value</key>
4058 <integer>5</integer>
4059 </map>
4060 <key>JoystickAxis6</key>
4061 <map>
4062 <key>Comment</key>
4063 <string>Flycam hardware axis mapping for internal axis 6 ([0, 5]).</string>
4064 <key>Persist</key>
4065 <integer>1</integer>
4066 <key>Type</key>
4067 <string>S32</string>
4068 <key>Value</key>
4069 <integer>-1</integer>
4070 </map>
4071 <key>JoystickBuildEnabled</key>
4072 <map>
4073 <key>Comment</key>
4074 <string>Enables the Joystick to move edited objects.</string>
4075 <key>Persist</key>
4076 <integer>1</integer>
4077 <key>Type</key>
4078 <string>Boolean</string>
4079 <key>Value</key>
4080 <string>1</string>
4081 </map>
4082 <key>JoystickEnabled</key>
4083 <map>
4084 <key>Comment</key>
4085 <string>Enables Joystick Input.</string>
4086 <key>Persist</key>
4087 <integer>1</integer>
4088 <key>Type</key>
4089 <string>Boolean</string>
4090 <key>Value</key>
4091 <integer>0</integer>
4092 </map>
4093 <key>JoystickFlycamEnabled</key>
4094 <map>
4095 <key>Comment</key>
4096 <string>Enables the Joystick to control the flycam.</string>
4097 <key>Persist</key>
4098 <integer>1</integer>
4099 <key>Type</key>
4100 <string>Boolean</string>
4101 <key>Value</key>
4102 <string>1</string>
4103 </map>
4104 <key>JoystickInitialized</key>
4105 <map>
4106 <key>Comment</key>
4107 <string>Whether or not a joystick has been detected and initiailized.</string>
4108 <key>Persist</key>
4109 <integer>1</integer>
4110 <key>Type</key>
4111 <string>String</string>
4112 <key>Value</key>
4113 <string />
4114 </map>
3740 <key>KeepAspectForSnapshot</key> 4115 <key>KeepAspectForSnapshot</key>
3741 <map> 4116 <map>
3742 <key>Comment</key> 4117 <key>Comment</key>
3743 <string>Use full window when taking snapshot, regardless of requested image size</string> 4118 <string>Use full window when taking snapshot, regardless of requested image size</string>
3744 <key>Persist</key> 4119 <key>Persist</key>
3745 <integer>1</integer> 4120 <integer>1</integer>
3746 <key>Type</key> 4121 <key>Type</key>
3747 <string>Boolean</string> 4122 <string>Boolean</string>
3748 <key>Value</key> 4123 <key>Value</key>
3749 <integer>1</integer> 4124 <integer>1</integer>
3750 </map> 4125 </map>
3751 <key>LCDDestination</key> 4126 <key>LCDDestination</key>
3752 <map> 4127 <map>
3753 <key>Comment</key> 4128 <key>Comment</key>
3754 <string>Which LCD to use</string> 4129 <string>Which LCD to use</string>
3755 <key>Persist</key> 4130 <key>Persist</key>
3756 <integer>1</integer> 4131 <integer>1</integer>
3757 <key>Type</key> 4132 <key>Type</key>
3758 <string>S32</string> 4133 <string>S32</string>
3759 <key>Value</key> 4134 <key>Value</key>
3760 <integer>0</integer> 4135 <integer>0</integer>
3761 </map> 4136 </map>
3762 <key>LSLHelpRect</key> 4137 <key>LSLHelpRect</key>
3763 <map> 4138 <map>
3764 <key>Comment</key> 4139 <key>Comment</key>
3765 <string>Rectangle for LSL help window</string> 4140 <string>Rectangle for LSL help window</string>
3766 <key>Persist</key> 4141 <key>Persist</key>
3767 <integer>1</integer> 4142 <integer>1</integer>
3768 <key>Type</key> 4143 <key>Type</key>
3769 <string>Rect</string> 4144 <string>Rect</string>
3770 <key>Value</key> 4145 <key>Value</key>
3771 <array> 4146 <array>
3772 <integer>0</integer> 4147 <integer>0</integer>
3773 <integer>400</integer> 4148 <integer>400</integer>
3774 <integer>400</integer> 4149 <integer>400</integer>
3775 <integer>0</integer> 4150 <integer>0</integer>
3776 </array> 4151 </array>
3777 </map> 4152 </map>
3778 <key>LSLHelpURL</key> 4153 <key>LSLHelpURL</key>
3779 <map> 4154 <map>
3780 <key>Comment</key> 4155 <key>Comment</key>
3781 <string>URL that points to LSL help files, with [LSL_STRING] corresponding to the referenced LSL function or keyword</string> 4156 <string>URL that points to LSL help files, with [LSL_STRING] corresponding to the referenced LSL function or keyword</string>
3782 <key>Persist</key> 4157 <key>Persist</key>
3783 <integer>1</integer> 4158 <integer>1</integer>
3784 <key>Type</key> 4159 <key>Type</key>
3785 <string>String</string> 4160 <string>String</string>
3786 <key>Value</key> 4161 <key>Value</key>
3787 <string>https://wiki.secondlife.com/wiki/[LSL_STRING]</string> 4162 <string>https://wiki.secondlife.com/wiki/[LSL_STRING]</string>
3788 </map> 4163 </map>
3789 <key>LagMeterShrunk</key> 4164 <key>LagMeterShrunk</key>
3790 <map> 4165 <map>
3791 <key>Comment</key> 4166 <key>Comment</key>
3792 <string>Last large/small state for lag meter</string> 4167 <string>Last large/small state for lag meter</string>
3793 <key>Persist</key> 4168 <key>Persist</key>
3794 <integer>1</integer> 4169 <integer>1</integer>
3795 <key>Type</key> 4170 <key>Type</key>
3796 <string>Boolean</string> 4171 <string>Boolean</string>
3797 <key>Value</key> 4172 <key>Value</key>
3798 <integer>0</integer> 4173 <integer>0</integer>
3799 </map> 4174 </map>
3800 <key>Language</key> 4175 <key>Language</key>
3801 <map> 4176 <map>
3802 <key>Comment</key> 4177 <key>Comment</key>
3803 <string>Language specifier (for XUI)</string> 4178 <string>Language specifier (for XUI)</string>
3804 <key>Persist</key> 4179 <key>Persist</key>
3805 <integer>1</integer> 4180 <integer>1</integer>
3806 <key>Type</key> 4181 <key>Type</key>
3807 <string>String</string> 4182 <string>String</string>
3808 <key>Value</key> 4183 <key>Value</key>
3809 <string>default</string> 4184 <string>default</string>
3810 </map> 4185 </map>
3811 <key>LastFeatureVersion</key> 4186 <key>LastFeatureVersion</key>
3812 <map> 4187 <map>
3813 <key>Comment</key> 4188 <key>Comment</key>
3814 <string>[DO NOT MODIFY] Version number for tracking hardware changes</string> 4189 <string>[DO NOT MODIFY] Version number for tracking hardware changes</string>
3815 <key>Persist</key> 4190 <key>Persist</key>
3816 <integer>1</integer> 4191 <integer>1</integer>
3817 <key>Type</key> 4192 <key>Type</key>
3818 <string>S32</string> 4193 <string>S32</string>
3819 <key>Value</key> 4194 <key>Value</key>
3820 <integer>0</integer> 4195 <integer>0</integer>
3821 </map> 4196 </map>
3822 <key>LastFindPanel</key> 4197 <key>LastFindPanel</key>
3823 <map> 4198 <map>
3824 <key>Comment</key> 4199 <key>Comment</key>
3825 <string>Controls which find operation appears by default when clicking &quot;Find&quot; button </string> 4200 <string>Controls which find operation appears by default when clicking "Find" button </string>
3826 <key>Persist</key> 4201 <key>Persist</key>
3827 <integer>1</integer> 4202 <integer>1</integer>
3828 <key>Type</key> 4203 <key>Type</key>
3829 <string>String</string> 4204 <string>String</string>
3830 <key>Value</key> 4205 <key>Value</key>
3831 <string>find_all_panel</string> 4206 <string>find_all_panel</string>
3832 </map> 4207 </map>
3833 <key>LastName</key> 4208 <key>LastName</key>
3834 <map> 4209 <map>
3835 <key>Comment</key> 4210 <key>Comment</key>
3836 <string>Login last name</string> 4211 <string>Login last name</string>
3837 <key>Persist</key> 4212 <key>Persist</key>
3838 <integer>1</integer> 4213 <integer>1</integer>
3839 <key>Type</key> 4214 <key>Type</key>
3840 <string>String</string> 4215 <string>String</string>
3841 <key>Value</key> 4216 <key>Value</key>
3842 <string /> 4217 <string />
3843 </map> 4218 </map>
3844 <key>LastPrefTab</key> 4219 <key>LastPrefTab</key>
3845 <map> 4220 <map>
3846 <key>Comment</key> 4221 <key>Comment</key>
3847 <string>Last selected tab in preferences window</string> 4222 <string>Last selected tab in preferences window</string>
3848 <key>Persist</key> 4223 <key>Persist</key>
3849 <integer>1</integer> 4224 <integer>1</integer>
3850 <key>Type</key> 4225 <key>Type</key>
3851 <string>S32</string> 4226 <string>S32</string>
3852 <key>Value</key> 4227 <key>Value</key>
3853 <integer>0</integer> 4228 <integer>0</integer>
3854 </map> 4229 </map>
3855 <key>LastRunVersion</key> 4230 <key>LastRunVersion</key>
3856 <map> 4231 <map>
3857 <key>Comment</key> 4232 <key>Comment</key>
3858 <string>Version number of last instance of the viewer that you ran</string> 4233 <string>Version number of last instance of the viewer that you ran</string>
3859 <key>Persist</key> 4234 <key>Persist</key>
3860 <integer>1</integer> 4235 <integer>1</integer>
3861 <key>Type</key> 4236 <key>Type</key>
3862 <string>String</string> 4237 <string>String</string>
3863 <key>Value</key> 4238 <key>Value</key>
3864 <string>0.0.0</string> 4239 <string>0.0.0</string>
3865 </map> 4240 </map>
3866 <key>LastSnapshotHeight</key> 4241 <key>LastSnapshotHeight</key>
3867 <map> 4242 <map>
3868 <key>Comment</key> 4243 <key>Comment</key>
3869 <string>The height of the last snapshot, in px</string> 4244 <string>The height of the last snapshot, in px</string>
3870 <key>Persist</key> 4245 <key>Persist</key>
3871 <integer>1</integer> 4246 <integer>1</integer>
3872 <key>Type</key> 4247 <key>Type</key>
3873 <string>S32</string> 4248 <string>S32</string>
3874 <key>Value</key> 4249 <key>Value</key>
3875 <integer>768</integer> 4250 <integer>768</integer>
3876 </map> 4251 </map>
3877 <key>LastSnapshotType</key> 4252 <key>LastSnapshotType</key>
3878 <map> 4253 <map>
3879 <key>Comment</key> 4254 <key>Comment</key>
3880 <string>Select this as next type of snapshot to take (0 = postcard, 1 = texture, 2 = local image)</string> 4255 <string>Select this as next type of snapshot to take (0 = postcard, 1 = texture, 2 = local image)</string>
3881 <key>Persist</key> 4256 <key>Persist</key>
3882 <integer>1</integer> 4257 <integer>1</integer>
3883 <key>Type</key> 4258 <key>Type</key>
3884 <string>S32</string> 4259 <string>S32</string>
3885 <key>Value</key> 4260 <key>Value</key>
3886 <integer>0</integer> 4261 <integer>0</integer>
3887 </map> 4262 </map>
3888 <key>LastSnapshotWidth</key> 4263 <key>LastSnapshotWidth</key>
3889 <map> 4264 <map>
3890 <key>Comment</key> 4265 <key>Comment</key>
3891 <string>The width of the last snapshot, in px</string> 4266 <string>The width of the last snapshot, in px</string>
3892 <key>Persist</key> 4267 <key>Persist</key>
3893 <integer>1</integer> 4268 <integer>1</integer>
3894 <key>Type</key> 4269 <key>Type</key>
3895 <string>S32</string> 4270 <string>S32</string>
3896 <key>Value</key> 4271 <key>Value</key>
3897 <integer>1024</integer> 4272 <integer>1024</integer>
3898 </map> 4273 </map>
3899 <key>LeftClickShowMenu</key> 4274 <key>LeftClickShowMenu</key>
3900 <map> 4275 <map>
3901 <key>Comment</key> 4276 <key>Comment</key>
3902 <string>Left click opens pie menu (FALSE = left click touches or grabs object)</string> 4277 <string>Left click opens pie menu (FALSE = left click touches or grabs object)</string>
3903 <key>Persist</key> 4278 <key>Persist</key>
3904 <integer>1</integer> 4279 <integer>1</integer>
3905 <key>Type</key> 4280 <key>Type</key>
3906 <string>Boolean</string> 4281 <string>Boolean</string>
3907 <key>Value</key> 4282 <key>Value</key>
3908 <integer>0</integer> 4283 <integer>0</integer>
3909 </map> 4284 </map>
3910 <key>LimitDragDistance</key> 4285 <key>LimitDragDistance</key>
3911 <map> 4286 <map>
3912 <key>Comment</key> 4287 <key>Comment</key>
3913 <string>Limit translation of object via translate tool</string> 4288 <string>Limit translation of object via translate tool</string>
3914 <key>Persist</key> 4289 <key>Persist</key>
3915 <integer>1</integer> 4290 <integer>1</integer>
3916 <key>Type</key> 4291 <key>Type</key>
3917 <string>Boolean</string> 4292 <string>Boolean</string>
3918 <key>Value</key> 4293 <key>Value</key>
3919 <integer>1</integer> 4294 <integer>1</integer>
3920 </map> 4295 </map>
3921 <key>LimitSelectDistance</key> 4296 <key>LimitSelectDistance</key>
3922 <map> 4297 <map>
3923 <key>Comment</key> 4298 <key>Comment</key>
3924 <string>Disallow selection of objects beyond max select distance</string> 4299 <string>Disallow selection of objects beyond max select distance</string>
3925 <key>Persist</key> 4300 <key>Persist</key>
3926 <integer>1</integer> 4301 <integer>1</integer>
3927 <key>Type</key> 4302 <key>Type</key>
3928 <string>Boolean</string> 4303 <string>Boolean</string>
3929 <key>Value</key> 4304 <key>Value</key>
3930 <integer>1</integer> 4305 <integer>1</integer>
3931 </map> 4306 </map>
4307 <key>LipSyncAah</key>
4308 <map>
4309 <key>Comment</key>
4310 <string>Aah (jaw opening) babble loop</string>
4311 <key>Persist</key>
4312 <integer>1</integer>
4313 <key>Type</key>
4314 <string>String</string>
4315 <key>Value</key>
4316 <string>257998776531013446642343</string>
4317 </map>
4318 <key>LipSyncAahPowerTransfer</key>
4319 <map>
4320 <key>Comment</key>
4321 <string>Transfer curve for Voice Interface power to aah lip sync amplitude</string>
4322 <key>Persist</key>
4323 <integer>1</integer>
4324 <key>Type</key>
4325 <string>String</string>
4326 <key>Value</key>
4327 <string>0000123456789</string>
4328 </map>
4329 <key>LipSyncEnabled</key>
4330 <map>
4331 <key>Comment</key>
4332 <string>0 disable lip-sync, 1 enable babble loop</string>
4333 <key>Persist</key>
4334 <integer>1</integer>
4335 <key>Type</key>
4336 <string>Boolean</string>
4337 <key>Value</key>
4338 <integer>0</integer>
4339 </map>
4340 <key>LipSyncOoh</key>
4341 <map>
4342 <key>Comment</key>
4343 <string>Ooh (mouth width) babble loop</string>
4344 <key>Persist</key>
4345 <integer>1</integer>
4346 <key>Type</key>
4347 <string>String</string>
4348 <key>Value</key>
4349 <string>1247898743223344444443200000</string>
4350 </map>
4351 <key>LipSyncOohAahRate</key>
4352 <map>
4353 <key>Comment</key>
4354 <string>Rate to babble Ooh and Aah (/sec)</string>
4355 <key>Persist</key>
4356 <integer>1</integer>
4357 <key>Type</key>
4358 <string>F32</string>
4359 <key>Value</key>
4360 <real>24.0</real>
4361 </map>
4362 <key>LipSyncOohPowerTransfer</key>
4363 <map>
4364 <key>Comment</key>
4365 <string>Transfer curve for Voice Interface power to ooh lip sync amplitude</string>
4366 <key>Persist</key>
4367 <integer>1</integer>
4368 <key>Type</key>
4369 <string>String</string>
4370 <key>Value</key>
4371 <string>0012345566778899</string>
4372 </map>
3932 <key>LocalCacheVersion</key> 4373 <key>LocalCacheVersion</key>
3933 <map> 4374 <map>
3934 <key>Comment</key> 4375 <key>Comment</key>
3935 <string>Version number of cache</string> 4376 <string>Version number of cache</string>
3936 <key>Persist</key> 4377 <key>Persist</key>
3937 <integer>1</integer> 4378 <integer>1</integer>
3938 <key>Type</key> 4379 <key>Type</key>
3939 <string>S32</string> 4380 <string>S32</string>
3940 <key>Value</key> 4381 <key>Value</key>
3941 <integer>0</integer> 4382 <integer>0</integer>
3942 </map> 4383 </map>
3943 <key>LogMessages</key> 4384 <key>LogMessages</key>
3944 <map> 4385 <map>
3945 <key>Comment</key> 4386 <key>Comment</key>
3946 <string>Log network traffic</string> 4387 <string>Log network traffic</string>
3947 <key>Persist</key> 4388 <key>Persist</key>
3948 <integer>1</integer> 4389 <integer>1</integer>
3949 <key>Type</key> 4390 <key>Type</key>
3950 <string>Boolean</string> 4391 <string>Boolean</string>
3951 <key>Value</key> 4392 <key>Value</key>
3952 <integer>0</integer> 4393 <integer>0</integer>
3953 </map> 4394 </map>
3954 <key>LoginAsGod</key> 4395 <key>LoginAsGod</key>
3955 <map> 4396 <map>
3956 <key>Comment</key> 4397 <key>Comment</key>
3957 <string>Attempt to login with god powers (Linden accounts only)</string> 4398 <string>Attempt to login with god powers (Linden accounts only)</string>
3958 <key>Persist</key> 4399 <key>Persist</key>
3959 <integer>1</integer> 4400 <integer>1</integer>
3960 <key>Type</key> 4401 <key>Type</key>
3961 <string>Boolean</string> 4402 <string>Boolean</string>
3962 <key>Value</key> 4403 <key>Value</key>
3963 <integer>0</integer> 4404 <integer>0</integer>
3964 </map> 4405 </map>
3965 <key>LoginLastLocation</key> 4406 <key>LoginLastLocation</key>
3966 <map> 4407 <map>
3967 <key>Comment</key> 4408 <key>Comment</key>
3968 <string>Login at same location you last logged out</string> 4409 <string>Login at same location you last logged out</string>
3969 <key>Persist</key> 4410 <key>Persist</key>
3970 <integer>1</integer> 4411 <integer>1</integer>
3971 <key>Type</key> 4412 <key>Type</key>
3972 <string>Boolean</string> 4413 <string>Boolean</string>
3973 <key>Value</key> 4414 <key>Value</key>
3974 <integer>1</integer> 4415 <integer>1</integer>
3975 </map> 4416 </map>
3976 <key>LoginPage</key> 4417 <key>LoginPage</key>
3977 <map> 4418 <map>
3978 <key>Comment</key> 4419 <key>Comment</key>
3979 <string>Login authentication page.</string> 4420 <string>Login authentication page.</string>
3980 <key>Persist</key> 4421 <key>Persist</key>
3981 <integer>1</integer> 4422 <integer>1</integer>
3982 <key>Type</key> 4423 <key>Type</key>
3983 <string>String</string> 4424 <string>String</string>
3984 <key>Value</key> 4425 <key>Value</key>
3985 <string /> 4426 <string />
3986 </map> 4427 </map>
3987 <key>LoginURI</key>
3988 <map>
3989 <key>Comment</key>
3990 <string>login server and CGI prefix to use</string>
3991 <key>Persist</key>
3992 <integer>1</integer>
3993 <key>Type</key>
3994 <string>String</string>
3995 <key>Value</key>
3996 <string />
3997 </map>
3998 <key>LosslessJ2CUpload</key> 4428 <key>LosslessJ2CUpload</key>
3999 <map> 4429 <map>
4000 <key>Comment</key> 4430 <key>Comment</key>
4001 <string>Use lossless compression for small image uploads</string> 4431 <string>Use lossless compression for small image uploads</string>
4002 <key>Persist</key> 4432 <key>Persist</key>
4003 <integer>1</integer> 4433 <integer>1</integer>
4004 <key>Type</key> 4434 <key>Type</key>
4005 <string>Boolean</string> 4435 <string>Boolean</string>
4006 <key>Value</key> 4436 <key>Value</key>
4007 <integer>0</integer> 4437 <integer>0</integer>
4008 </map> 4438 </map>
4439 <key>MainloopTimeoutDefault</key>
4440 <map>
4441 <key>Comment</key>
4442 <string>Timeout duration for mainloop lock detection, in seconds.</string>
4443 <key>Persist</key>
4444 <integer>1</integer>
4445 <key>Type</key>
4446 <string>F32</string>
4447 <key>Value</key>
4448 <real>10.0</real>
4449 </map>
4009 <key>MapOverlayIndex</key> 4450 <key>MapOverlayIndex</key>
4010 <map> 4451 <map>
4011 <key>Comment</key> 4452 <key>Comment</key>
4012 <string>Currently selected world map type</string> 4453 <string>Currently selected world map type</string>
4013 <key>Persist</key> 4454 <key>Persist</key>
4014 <integer>1</integer> 4455 <integer>1</integer>
4015 <key>Type</key> 4456 <key>Type</key>
4016 <string>S32</string> 4457 <string>S32</string>
4017 <key>Value</key> 4458 <key>Value</key>
4018 <integer>0</integer> 4459 <integer>0</integer>
4019 </map> 4460 </map>
4020 <key>MapScale</key> 4461 <key>MapScale</key>
4021 <map> 4462 <map>
4022 <key>Comment</key> 4463 <key>Comment</key>
4023 <string>World map zoom level (pixels per region)</string> 4464 <string>World map zoom level (pixels per region)</string>
4024 <key>Persist</key> 4465 <key>Persist</key>
4025 <integer>1</integer> 4466 <integer>1</integer>
4026 <key>Type</key> 4467 <key>Type</key>
4027 <string>F32</string> 4468 <string>F32</string>
4028 <key>Value</key> 4469 <key>Value</key>
4029 <real>128</real> 4470 <real>128.0</real>
4030 </map> 4471 </map>
4031 <key>MapShowClassifieds</key> 4472 <key>MapShowClassifieds</key>
4032 <map> 4473 <map>
4033 <key>Comment</key> 4474 <key>Comment</key>
4034 <string>Show locations associated with classified ads on world map</string> 4475 <string>Show locations associated with classified ads on world map</string>
4035 <key>Persist</key> 4476 <key>Persist</key>
4036 <integer>1</integer> 4477 <integer>1</integer>
4037 <key>Type</key> 4478 <key>Type</key>
4038 <string>Boolean</string> 4479 <string>Boolean</string>
4039 <key>Value</key> 4480 <key>Value</key>
4040 <integer>1</integer> 4481 <integer>1</integer>
4041 </map> 4482 </map>
4042 <key>MapShowEvents</key> 4483 <key>MapShowEvents</key>
4043 <map> 4484 <map>
4044 <key>Comment</key> 4485 <key>Comment</key>
4045 <string>Show events on world map</string> 4486 <string>Show events on world map</string>
4046 <key>Persist</key> 4487 <key>Persist</key>
4047 <integer>1</integer> 4488 <integer>1</integer>
4048 <key>Type</key> 4489 <key>Type</key>
4049 <string>Boolean</string> 4490 <string>Boolean</string>
4050 <key>Value</key> 4491 <key>Value</key>
4051 <integer>1</integer> 4492 <integer>1</integer>
4052 </map> 4493 </map>
4053 <key>MapShowInfohubs</key> 4494 <key>MapShowInfohubs</key>
4054 <map> 4495 <map>
4055 <key>Comment</key> 4496 <key>Comment</key>
4056 <string>Show infohubs on the world map</string> 4497 <string>Show infohubs on the world map</string>
4057 <key>Persist</key> 4498 <key>Persist</key>
4058 <integer>1</integer> 4499 <integer>1</integer>
4059 <key>Type</key> 4500 <key>Type</key>
4060 <string>Boolean</string> 4501 <string>Boolean</string>
4061 <key>Value</key> 4502 <key>Value</key>
4062 <integer>1</integer> 4503 <integer>1</integer>
4063 </map> 4504 </map>
4064 <key>MapShowLandForSale</key> 4505 <key>MapShowLandForSale</key>
4065 <map> 4506 <map>
4066 <key>Comment</key> 4507 <key>Comment</key>
4067 <string>Show land for sale on world map</string> 4508 <string>Show land for sale on world map</string>
4068 <key>Persist</key> 4509 <key>Persist</key>
4069 <integer>1</integer> 4510 <integer>1</integer>
4070 <key>Type</key> 4511 <key>Type</key>
4071 <string>Boolean</string> 4512 <string>Boolean</string>
4072 <key>Value</key> 4513 <key>Value</key>
4073 <integer>0</integer> 4514 <integer>0</integer>
4074 </map> 4515 </map>
4075 <key>MapShowPeople</key> 4516 <key>MapShowPeople</key>
4076 <map> 4517 <map>
4077 <key>Comment</key> 4518 <key>Comment</key>
4078 <string>Show other users on world map</string> 4519 <string>Show other users on world map</string>
4079 <key>Persist</key> 4520 <key>Persist</key>
4080 <integer>1</integer> 4521 <integer>1</integer>
4081 <key>Type</key> 4522 <key>Type</key>
4082 <string>Boolean</string> 4523 <string>Boolean</string>
4083 <key>Value</key> 4524 <key>Value</key>
4084 <integer>1</integer> 4525 <integer>1</integer>
4085 </map> 4526 </map>
4086 <key>MapShowPopular</key>
4087 <map>
4088 <key>Comment</key>
4089 <string>Show popular places on world map</string>
4090 <key>Persist</key>
4091 <integer>1</integer>
4092 <key>Type</key>
4093 <string>Boolean</string>
4094 <key>Value</key>
4095 <integer>1</integer>
4096 </map>
4097 <key>MapShowTelehubs</key> 4527 <key>MapShowTelehubs</key>
4098 <map> 4528 <map>
4099 <key>Comment</key> 4529 <key>Comment</key>
4100 <string>Show telehubs on world map</string> 4530 <string>Show telehubs on world map</string>
4101 <key>Persist</key> 4531 <key>Persist</key>
4102 <integer>1</integer> 4532 <integer>1</integer>
4103 <key>Type</key> 4533 <key>Type</key>
4104 <string>Boolean</string> 4534 <string>Boolean</string>
4105 <key>Value</key> 4535 <key>Value</key>
4106 <integer>1</integer> 4536 <integer>1</integer>
4107 </map> 4537 </map>
4108 <key>Marker</key> 4538 <key>Marker</key>
4109 <map> 4539 <map>
4110 <key>Comment</key> 4540 <key>Comment</key>
4111 <string>[NOT USED]</string> 4541 <string>[NOT USED]</string>
4112 <key>Persist</key> 4542 <key>Persist</key>
4113 <integer>1</integer> 4543 <integer>1</integer>
4114 <key>Type</key> 4544 <key>Type</key>
4115 <string>String</string> 4545 <string>String</string>
4116 <key>Value</key> 4546 <key>Value</key>
4117 <string /> 4547 <string />
4118 </map> 4548 </map>
4119 <key>MaxDragDistance</key> 4549 <key>MaxDragDistance</key>
4120 <map> 4550 <map>
4121 <key>Comment</key> 4551 <key>Comment</key>
4122 <string>Maximum allowed translation distance in a single operation of translate tool (meters from start point)</string> 4552 <string>Maximum allowed translation distance in a single operation of translate tool (meters from start point)</string>
4123 <key>Persist</key> 4553 <key>Persist</key>
4124 <integer>1</integer> 4554 <integer>1</integer>
4125 <key>Type</key> 4555 <key>Type</key>
4126 <string>F32</string> 4556 <string>F32</string>
4127 <key>Value</key> 4557 <key>Value</key>
4128 <real>48</real> 4558 <real>48.0</real>
4129 </map> 4559 </map>
4130 <key>MaxSelectDistance</key> 4560 <key>MaxSelectDistance</key>
4131 <map> 4561 <map>
4132 <key>Comment</key> 4562 <key>Comment</key>
4133 <string>Maximum allowed selection distance (meters from avatar)</string> 4563 <string>Maximum allowed selection distance (meters from avatar)</string>
4134 <key>Persist</key> 4564 <key>Persist</key>
4135 <integer>1</integer> 4565 <integer>1</integer>
4136 <key>Type</key> 4566 <key>Type</key>
4137 <string>F32</string> 4567 <string>F32</string>
4138 <key>Value</key> 4568 <key>Value</key>
4139 <real>64</real> 4569 <real>64.0</real>
4140 </map> 4570 </map>
4141 <key>MeanCollisionBump</key> 4571 <key>MeanCollisionBump</key>
4142 <map> 4572 <map>
4143 <key>Comment</key> 4573 <key>Comment</key>
4144 <string>You have experienced an abuse of being bumped by an object or avatar</string> 4574 <string>You have experienced an abuse of being bumped by an object or avatar</string>
4145 <key>Persist</key> 4575 <key>Persist</key>
4146 <integer>1</integer> 4576 <integer>1</integer>
4147 <key>Type</key> 4577 <key>Type</key>
4148 <string>Boolean</string> 4578 <string>Boolean</string>
4149 <key>Value</key> 4579 <key>Value</key>
4150 <integer>0</integer> 4580 <integer>0</integer>
4151 </map> 4581 </map>
4152 <key>MeanCollisionPhysical</key> 4582 <key>MeanCollisionPhysical</key>
4153 <map> 4583 <map>
4154 <key>Comment</key> 4584 <key>Comment</key>
4155 <string>You have experienced an abuse from a physical object</string> 4585 <string>You have experienced an abuse from a physical object</string>
4156 <key>Persist</key> 4586 <key>Persist</key>
4157 <integer>1</integer> 4587 <integer>1</integer>
4158 <key>Type</key> 4588 <key>Type</key>
4159 <string>Boolean</string> 4589 <string>Boolean</string>
4160 <key>Value</key> 4590 <key>Value</key>
4161 <integer>0</integer> 4591 <integer>0</integer>
4162 </map> 4592 </map>
4163 <key>MeanCollisionPushObject</key> 4593 <key>MeanCollisionPushObject</key>
4164 <map> 4594 <map>
4165 <key>Comment</key> 4595 <key>Comment</key>
4166 <string>You have experienced an abuse of being pushed by a scripted object</string> 4596 <string>You have experienced an abuse of being pushed by a scripted object</string>
4167 <key>Persist</key> 4597 <key>Persist</key>
4168 <integer>1</integer> 4598 <integer>1</integer>
4169 <key>Type</key> 4599 <key>Type</key>
4170 <string>Boolean</string> 4600 <string>Boolean</string>
4171 <key>Value</key> 4601 <key>Value</key>
4172 <integer>0</integer> 4602 <integer>0</integer>
4173 </map> 4603 </map>
4174 <key>MeanCollisionScripted</key> 4604 <key>MeanCollisionScripted</key>
4175 <map> 4605 <map>
4176 <key>Comment</key> 4606 <key>Comment</key>
4177 <string>You have experienced an abuse from a scripted object</string> 4607 <string>You have experienced an abuse from a scripted object</string>
4178 <key>Persist</key> 4608 <key>Persist</key>
4179 <integer>1</integer> 4609 <integer>1</integer>
4180 <key>Type</key> 4610 <key>Type</key>
4181 <string>Boolean</string> 4611 <string>Boolean</string>
4182 <key>Value</key> 4612 <key>Value</key>
4183 <integer>0</integer> 4613 <integer>0</integer>
4184 </map> 4614 </map>
4185 <key>MeanCollisionSelected</key> 4615 <key>MeanCollisionSelected</key>
4186 <map> 4616 <map>
4187 <key>Comment</key> 4617 <key>Comment</key>
4188 <string>You have experienced an abuse of being pushed via a selected object</string> 4618 <string>You have experienced an abuse of being pushed via a selected object</string>
4189 <key>Persist</key> 4619 <key>Persist</key>
4190 <integer>1</integer> 4620 <integer>1</integer>
4191 <key>Type</key> 4621 <key>Type</key>
4192 <string>Boolean</string> 4622 <string>Boolean</string>
4193 <key>Value</key> 4623 <key>Value</key>
4194 <integer>0</integer> 4624 <integer>0</integer>
4195 </map> 4625 </map>
4196 <key>MenuAccessKeyTime</key> 4626 <key>MenuAccessKeyTime</key>
4197 <map> 4627 <map>
4198 <key>Comment</key> 4628 <key>Comment</key>
4199 <string>Time (seconds) in which the menu key must be tapped to move focus to the menu bar</string> 4629 <string>Time (seconds) in which the menu key must be tapped to move focus to the menu bar</string>
4200 <key>Persist</key> 4630 <key>Persist</key>
4201 <integer>1</integer> 4631 <integer>1</integer>
4202 <key>Type</key> 4632 <key>Type</key>
4203 <string>F32</string> 4633 <string>F32</string>
4204 <key>Value</key> 4634 <key>Value</key>
4205 <real>0.25</real> 4635 <real>0.25</real>
4206 </map> 4636 </map>
4207 <key>MenuBarHeight</key> 4637 <key>MenuBarHeight</key>
4208 <map> 4638 <map>
4209 <key>Comment</key> 4639 <key>Comment</key>
4210 <string /> 4640 <string />
4211 <key>Persist</key> 4641 <key>Persist</key>
4212 <integer>0</integer> 4642 <integer>0</integer>
4213 <key>Type</key> 4643 <key>Type</key>
4214 <string>S32</string> 4644 <string>S32</string>
4215 <key>Value</key> 4645 <key>Value</key>
4216 <integer>18</integer> 4646 <integer>18</integer>
4217 </map> 4647 </map>
4218 <key>MenuBarWidth</key> 4648 <key>MenuBarWidth</key>
4219 <map> 4649 <map>
4220 <key>Comment</key> 4650 <key>Comment</key>
4221 <string /> 4651 <string />
4222 <key>Persist</key> 4652 <key>Persist</key>
4223 <integer>0</integer> 4653 <integer>0</integer>
4224 <key>Type</key> 4654 <key>Type</key>
4225 <string>S32</string> 4655 <string>S32</string>
4226 <key>Value</key> 4656 <key>Value</key>
4227 <integer>410</integer> 4657 <integer>410</integer>
4228 </map> 4658 </map>
4229 <key>MiniMapRotate</key> 4659 <key>MiniMapRotate</key>
4230 <map> 4660 <map>
4231 <key>Comment</key> 4661 <key>Comment</key>
4232 <string>Rotate miniature world map to avatar direction</string> 4662 <string>Rotate miniature world map to avatar direction</string>
4233 <key>Persist</key> 4663 <key>Persist</key>
4234 <integer>1</integer> 4664 <integer>1</integer>
4235 <key>Type</key> 4665 <key>Type</key>
4236 <string>Boolean</string> 4666 <string>Boolean</string>
4237 <key>Value</key> 4667 <key>Value</key>
4238 <integer>1</integer> 4668 <integer>1</integer>
4239 </map> 4669 </map>
4240 <key>MiniMapScale</key> 4670 <key>MiniMapScale</key>
4241 <map> 4671 <map>
4242 <key>Comment</key> 4672 <key>Comment</key>
4243 <string>Miniature world map zoom levle (pixels per region)</string> 4673 <string>Miniature world map zoom levle (pixels per region)</string>
4244 <key>Persist</key> 4674 <key>Persist</key>
4245 <integer>1</integer> 4675 <integer>1</integer>
4246 <key>Type</key> 4676 <key>Type</key>
4247 <string>F32</string> 4677 <string>F32</string>
4248 <key>Value</key> 4678 <key>Value</key>
4249 <real>128</real> 4679 <real>128.0</real>
4250 </map> 4680 </map>
4251 <key>MouseSensitivity</key> 4681 <key>MouseSensitivity</key>
4252 <map> 4682 <map>
4253 <key>Comment</key> 4683 <key>Comment</key>
4254 <string>Controls responsiveness of mouse when in mouselook mode (fraction or multiple of default mouse sensitivity)</string> 4684 <string>Controls responsiveness of mouse when in mouselook mode (fraction or multiple of default mouse sensitivity)</string>
4255 <key>Persist</key> 4685 <key>Persist</key>
4256 <integer>1</integer> 4686 <integer>1</integer>
4257 <key>Type</key> 4687 <key>Type</key>
4258 <string>F32</string> 4688 <string>F32</string>
4259 <key>Value</key> 4689 <key>Value</key>
4260 <real>3</real> 4690 <real>3.0</real>
4261 </map> 4691 </map>
4262 <key>MouseSmooth</key> 4692 <key>MouseSmooth</key>
4263 <map> 4693 <map>
4264 <key>Comment</key> 4694 <key>Comment</key>
4265 <string>Smooths out motion of mouse when in mouselook mode.</string> 4695 <string>Smooths out motion of mouse when in mouselook mode.</string>
4266 <key>Persist</key> 4696 <key>Persist</key>
4267 <integer>1</integer> 4697 <integer>1</integer>
4268 <key>Type</key> 4698 <key>Type</key>
4269 <string>Boolean</string> 4699 <string>Boolean</string>
4270 <key>Value</key> 4700 <key>Value</key>
4271 <integer>0</integer> 4701 <integer>0</integer>
4272 </map> 4702 </map>
4273 <key>MouseSun</key> 4703 <key>MouseSun</key>
4274 <map> 4704 <map>
4275 <key>Comment</key> 4705 <key>Comment</key>
4276 <string /> 4706 <string />
4277 <key>Persist</key> 4707 <key>Persist</key>
4278 <integer>0</integer> 4708 <integer>0</integer>
4279 <key>Type</key> 4709 <key>Type</key>
4280 <string>Boolean</string> 4710 <string>Boolean</string>
4281 <key>Value</key> 4711 <key>Value</key>
4282 <integer>0</integer> 4712 <integer>0</integer>
4283 </map> 4713 </map>
4284 <key>MouselookBtnState</key> 4714 <key>MouselookBtnState</key>
4285 <map> 4715 <map>
4286 <key>Comment</key> 4716 <key>Comment</key>
4287 <string /> 4717 <string />
4288 <key>Persist</key> 4718 <key>Persist</key>
4289 <integer>0</integer> 4719 <integer>0</integer>
4290 <key>Type</key> 4720 <key>Type</key>
4291 <string>Boolean</string> 4721 <string>Boolean</string>
4292 <key>Value</key> 4722 <key>Value</key>
4293 <integer>0</integer> 4723 <integer>0</integer>
4294 </map> 4724 </map>
4295 <key>MoveDownBtnRect</key> 4725 <key>MoveDownBtnRect</key>
4296 <map> 4726 <map>
4297 <key>Comment</key> 4727 <key>Comment</key>
4298 <string /> 4728 <string />
4299 <key>Persist</key> 4729 <key>Persist</key>
4300 <integer>0</integer> 4730 <integer>0</integer>
4301 <key>Type</key> 4731 <key>Type</key>
4302 <string>Rect</string> 4732 <string>Rect</string>
4303 <key>Value</key> 4733 <key>Value</key>
4304 <array> 4734 <array>
4305 <integer>91</integer> 4735 <integer>91</integer>
4306 <integer>29</integer> 4736 <integer>29</integer>
4307 <integer>116</integer> 4737 <integer>116</integer>
4308 <integer>4</integer> 4738 <integer>4</integer>
4309 </array> 4739 </array>
4310 </map> 4740 </map>
4311 <key>MoveUpBtnRect</key> 4741 <key>MoveUpBtnRect</key>
4312 <map> 4742 <map>
4313 <key>Comment</key> 4743 <key>Comment</key>
4314 <string /> 4744 <string />
4315 <key>Persist</key> 4745 <key>Persist</key>
4316 <integer>0</integer> 4746 <integer>0</integer>
4317 <key>Type</key> 4747 <key>Type</key>
4318 <string>Rect</string> 4748 <string>Rect</string>
4319 <key>Value</key> 4749 <key>Value</key>
4320 <array> 4750 <array>
4321 <integer>91</integer> 4751 <integer>91</integer>
4322 <integer>54</integer> 4752 <integer>54</integer>
4323 <integer>116</integer> 4753 <integer>116</integer>
4324 <integer>29</integer> 4754 <integer>29</integer>
4325 </array> 4755 </array>
4326 </map> 4756 </map>
4327 <key>MuteAmbient</key> 4757 <key>MuteAmbient</key>
4328 <map> 4758 <map>
4329 <key>Comment</key> 4759 <key>Comment</key>
4330 <string>Ambient sound effects, such as wind noise, play at 0 volume</string> 4760 <string>Ambient sound effects, such as wind noise, play at 0 volume</string>
4331 <key>Persist</key> 4761 <key>Persist</key>
4332 <integer>1</integer> 4762 <integer>1</integer>
4333 <key>Type</key> 4763 <key>Type</key>
4334 <string>Boolean</string> 4764 <string>Boolean</string>
4335 <key>Value</key> 4765 <key>Value</key>
4336 <integer>0</integer> 4766 <integer>0</integer>
4337 </map> 4767 </map>
4338 <key>MuteAudio</key> 4768 <key>MuteAudio</key>
4339 <map> 4769 <map>
4340 <key>Comment</key> 4770 <key>Comment</key>
4341 <string>All audio plays at 0 volume (streaming audio still takes up bandwidth, for example)</string> 4771 <string>All audio plays at 0 volume (streaming audio still takes up bandwidth, for example)</string>
4342 <key>Persist</key> 4772 <key>Persist</key>
4343 <integer>1</integer> 4773 <integer>1</integer>
4344 <key>Type</key> 4774 <key>Type</key>
4345 <string>Boolean</string> 4775 <string>Boolean</string>
4346 <key>Value</key> 4776 <key>Value</key>
4347 <integer>0</integer> 4777 <integer>0</integer>
4348 </map> 4778 </map>
4349 <key>MuteMedia</key> 4779 <key>MuteMedia</key>
4350 <map> 4780 <map>
4351 <key>Comment</key> 4781 <key>Comment</key>
4352 <string>Media plays at 0 volume (streaming audio still takes up bandwidth)</string> 4782 <string>Media plays at 0 volume (streaming audio still takes up bandwidth)</string>
4353 <key>Persist</key> 4783 <key>Persist</key>
4354 <integer>1</integer> 4784 <integer>1</integer>
4355 <key>Type</key> 4785 <key>Type</key>
4356 <string>Boolean</string> 4786 <string>Boolean</string>
4357 <key>Value</key> 4787 <key>Value</key>
4358 <integer>0</integer> 4788 <integer>0</integer>
4359 </map> 4789 </map>
4360 <key>MuteMusic</key> 4790 <key>MuteMusic</key>
4361 <map> 4791 <map>
4362 <key>Comment</key> 4792 <key>Comment</key>
4363 <string>Music plays at 0 volume (streaming audio still takes up bandwidth)</string> 4793 <string>Music plays at 0 volume (streaming audio still takes up bandwidth)</string>
4364 <key>Persist</key> 4794 <key>Persist</key>
4365 <integer>1</integer> 4795 <integer>1</integer>
4366 <key>Type</key> 4796 <key>Type</key>
4367 <string>Boolean</string> 4797 <string>Boolean</string>
4368 <key>Value</key> 4798 <key>Value</key>
4369 <integer>0</integer> 4799 <integer>0</integer>
4370 </map> 4800 </map>
4371 <key>MuteSounds</key> 4801 <key>MuteSounds</key>
4372 <map> 4802 <map>
4373 <key>Comment</key> 4803 <key>Comment</key>
4374 <string>Sound effects play at 0 volume</string> 4804 <string>Sound effects play at 0 volume</string>
4375 <key>Persist</key> 4805 <key>Persist</key>
4376 <integer>1</integer> 4806 <integer>1</integer>
4377 <key>Type</key> 4807 <key>Type</key>
4378 <string>Boolean</string> 4808 <string>Boolean</string>
4379 <key>Value</key> 4809 <key>Value</key>
4380 <integer>0</integer> 4810 <integer>0</integer>
4381 </map> 4811 </map>
4382 <key>MuteUI</key> 4812 <key>MuteUI</key>
4383 <map> 4813 <map>
4384 <key>Comment</key> 4814 <key>Comment</key>
4385 <string>UI sound effects play at 0 volume</string> 4815 <string>UI sound effects play at 0 volume</string>
4386 <key>Persist</key> 4816 <key>Persist</key>
4387 <integer>1</integer> 4817 <integer>1</integer>
4388 <key>Type</key> 4818 <key>Type</key>
4389 <string>Boolean</string> 4819 <string>Boolean</string>
4390 <key>Value</key> 4820 <key>Value</key>
4391 <integer>0</integer> 4821 <integer>0</integer>
4392 </map> 4822 </map>
4393 <key>MuteVoice</key> 4823 <key>MuteVoice</key>
4394 <map> 4824 <map>
4395 <key>Comment</key> 4825 <key>Comment</key>
4396 <string>Voice plays at 0 volume (streaming audio still takes up bandwidth)</string> 4826 <string>Voice plays at 0 volume (streaming audio still takes up bandwidth)</string>
4397 <key>Persist</key> 4827 <key>Persist</key>
4398 <integer>1</integer> 4828 <integer>1</integer>
4399 <key>Type</key> 4829 <key>Type</key>
4400 <string>Boolean</string> 4830 <string>Boolean</string>
4401 <key>Value</key> 4831 <key>Value</key>
4402 <integer>0</integer> 4832 <integer>0</integer>
4403 </map> 4833 </map>
4404 <key>MuteWhenMinimized</key> 4834 <key>MuteWhenMinimized</key>
4405 <map> 4835 <map>
4406 <key>Comment</key> 4836 <key>Comment</key>
4407 <string>Mute audio when SL window is minimized</string> 4837 <string>Mute audio when SL window is minimized</string>
4408 <key>Persist</key> 4838 <key>Persist</key>
4409 <integer>1</integer> 4839 <integer>1</integer>
4410 <key>Type</key> 4840 <key>Type</key>
4411 <string>Boolean</string> 4841 <string>Boolean</string>
4412 <key>Value</key> 4842 <key>Value</key>
4413 <integer>1</integer> 4843 <integer>1</integer>
4414 </map> 4844 </map>
4415 <key>NewCacheLocation</key> 4845 <key>NewCacheLocation</key>
4416 <map> 4846 <map>
4417 <key>Comment</key> 4847 <key>Comment</key>
4418 <string>Change the location of the local disk cache to this</string> 4848 <string>Change the location of the local disk cache to this</string>
4419 <key>Persist</key> 4849 <key>Persist</key>
4420 <integer>1</integer> 4850 <integer>1</integer>
4421 <key>Type</key> 4851 <key>Type</key>
4422 <string>String</string> 4852 <string>String</string>
4423 <key>Value</key> 4853 <key>Value</key>
4424 <string /> 4854 <string />
4425 </map> 4855 </map>
4426 <key>NextLoginLocation</key> 4856 <key>NextLoginLocation</key>
4427 <map> 4857 <map>
4428 <key>Comment</key> 4858 <key>Comment</key>
4429 <string>Location to log into by default.</string> 4859 <string>Location to log into by default.</string>
4430 <key>Persist</key> 4860 <key>Persist</key>
4431 <integer>1</integer> 4861 <integer>1</integer>
4432 <key>Type</key> 4862 <key>Type</key>
4433 <string>String</string> 4863 <string>String</string>
4434 <key>Value</key> 4864 <key>Value</key>
4435 <string /> 4865 <string />
4436 </map> 4866 </map>
4437 <key>NoAudio</key> 4867 <key>NoAudio</key>
4438 <map> 4868 <map>
4439 <key>Comment</key> 4869 <key>Comment</key>
4440 <string>Disable audio playback.</string> 4870 <string>Disable audio playback.</string>
4441 <key>Persist</key> 4871 <key>Persist</key>
4442 <integer>1</integer> 4872 <integer>1</integer>
4443 <key>Type</key> 4873 <key>Type</key>
4444 <string>Boolean</string> 4874 <string>Boolean</string>
4445 <key>Value</key> 4875 <key>Value</key>
4446 <integer>0</integer> 4876 <integer>0</integer>
4447 </map> 4877 </map>
4448 <key>NoHardwareProbe</key> 4878 <key>NoHardwareProbe</key>
4449 <map> 4879 <map>
4450 <key>Comment</key> 4880 <key>Comment</key>
4451 <string>Disable hardware probe.</string> 4881 <string>Disable hardware probe.</string>
4452 <key>Persist</key> 4882 <key>Persist</key>
4453 <integer>1</integer> 4883 <integer>1</integer>
4454 <key>Type</key> 4884 <key>Type</key>
4455 <string>Boolean</string> 4885 <string>Boolean</string>
4456 <key>Value</key> 4886 <key>Value</key>
4457 <integer>0</integer> 4887 <integer>0</integer>
4458 </map> 4888 </map>
4459 <key>NoInventoryLibrary</key> 4889 <key>NoInventoryLibrary</key>
4460 <map> 4890 <map>
4461 <key>Comment</key> 4891 <key>Comment</key>
4462 <string>Do not request inventory library.</string> 4892 <string>Do not request inventory library.</string>
4463 <key>Persist</key> 4893 <key>Persist</key>
4464 <integer>1</integer> 4894 <integer>1</integer>
4465 <key>Type</key> 4895 <key>Type</key>
4466 <string>Boolean</string> 4896 <string>Boolean</string>
4467 <key>Value</key> 4897 <key>Value</key>
4468 <integer>0</integer> 4898 <integer>0</integer>
4469 </map> 4899 </map>
4470 <key>NoPreload</key> 4900 <key>NoPreload</key>
4471 <map> 4901 <map>
4472 <key>Comment</key> 4902 <key>Comment</key>
4473 <string>Disable sound and image preload.</string> 4903 <string>Disable sound and image preload.</string>
4474 <key>Persist</key> 4904 <key>Persist</key>
4475 <integer>1</integer> 4905 <integer>1</integer>
4476 <key>Type</key> 4906 <key>Type</key>
4477 <string>Boolean</string> 4907 <string>Boolean</string>
4478 <key>Value</key> 4908 <key>Value</key>
4479 <integer>0</integer> 4909 <integer>0</integer>
4480 </map> 4910 </map>
4481 <key>NoQuickTime</key> 4911 <key>NoQuickTime</key>
4482 <map> 4912 <map>
4483 <key>Comment</key> 4913 <key>Comment</key>
4484 <string>Disable quicktime playback.</string> 4914 <string>Disable quicktime playback.</string>
4485 <key>Persist</key> 4915 <key>Persist</key>
4486 <integer>1</integer> 4916 <integer>1</integer>
4487 <key>Type</key> 4917 <key>Type</key>
4488 <string>Boolean</string> 4918 <string>Boolean</string>
4489 <key>Value</key> 4919 <key>Value</key>
4490 <integer>0</integer> 4920 <integer>0</integer>
4491 </map> 4921 </map>
4492 <key>NoVerifySSLCert</key> 4922 <key>NoVerifySSLCert</key>
4493 <map> 4923 <map>
4494 <key>Comment</key> 4924 <key>Comment</key>
4495 <string>Do not verify SSL peers.</string> 4925 <string>Do not verify SSL peers.</string>
4496 <key>Persist</key> 4926 <key>Persist</key>
4497 <integer>1</integer> 4927 <integer>1</integer>
4498 <key>Type</key> 4928 <key>Type</key>
4499 <string>Boolean</string> 4929 <string>Boolean</string>
4500 <key>Value</key> 4930 <key>Value</key>
4501 <integer>0</integer> 4931 <integer>0</integer>
4502 </map> 4932 </map>
4503 <key>NotecardEditorRect</key> 4933 <key>NotecardEditorRect</key>
4504 <map> 4934 <map>
4505 <key>Comment</key> 4935 <key>Comment</key>
4506 <string>Rectangle for notecard editor</string> 4936 <string>Rectangle for notecard editor</string>
4507 <key>Persist</key> 4937 <key>Persist</key>
4508 <integer>1</integer> 4938 <integer>1</integer>
4509 <key>Type</key> 4939 <key>Type</key>
4510 <string>Rect</string> 4940 <string>Rect</string>
4511 <key>Value</key> 4941 <key>Value</key>
4512 <array> 4942 <array>
4513 <integer>0</integer> 4943 <integer>0</integer>
4514 <integer>400</integer> 4944 <integer>400</integer>
4515 <integer>400</integer> 4945 <integer>400</integer>
4516 <integer>0</integer> 4946 <integer>0</integer>
4517 </array> 4947 </array>
4518 </map> 4948 </map>
4519 <key>NotifyBoxHeight</key> 4949 <key>NotifyBoxHeight</key>
4520 <map> 4950 <map>
4521 <key>Comment</key> 4951 <key>Comment</key>
4522 <string>Height of notification messages</string> 4952 <string>Height of notification messages</string>
4523 <key>Persist</key> 4953 <key>Persist</key>
4524 <integer>1</integer> 4954 <integer>1</integer>
4525 <key>Type</key> 4955 <key>Type</key>
4526 <string>S32</string> 4956 <string>S32</string>
4527 <key>Value</key> 4957 <key>Value</key>
4528 <integer>200</integer> 4958 <integer>200</integer>
4529 </map> 4959 </map>
4530 <key>NotifyBoxWidth</key> 4960 <key>NotifyBoxWidth</key>
4531 <map> 4961 <map>
4532 <key>Comment</key> 4962 <key>Comment</key>
4533 <string>Width of notification messages</string> 4963 <string>Width of notification messages</string>
4534 <key>Persist</key> 4964 <key>Persist</key>
4535 <integer>1</integer> 4965 <integer>1</integer>
4536 <key>Type</key> 4966 <key>Type</key>
4537 <string>S32</string> 4967 <string>S32</string>
4538 <key>Value</key> 4968 <key>Value</key>
4539 <integer>350</integer> 4969 <integer>350</integer>
4540 </map> 4970 </map>
4541 <key>NotifyMoneyChange</key> 4971 <key>NotifyMoneyChange</key>
4542 <map> 4972 <map>
4543 <key>Comment</key> 4973 <key>Comment</key>
4544 <string>Pop up notifications for all L$ transactions</string> 4974 <string>Pop up notifications for all L$ transactions</string>
4545 <key>Persist</key> 4975 <key>Persist</key>
4546 <integer>1</integer> 4976 <integer>1</integer>
4547 <key>Type</key> 4977 <key>Type</key>
4548 <string>Boolean</string> 4978 <string>Boolean</string>
4549 <key>Value</key> 4979 <key>Value</key>
4550 <integer>1</integer> 4980 <integer>1</integer>
4551 </map> 4981 </map>
4552 <key>NotifyTipDuration</key> 4982 <key>NotifyTipDuration</key>
4553 <map> 4983 <map>
4554 <key>Comment</key> 4984 <key>Comment</key>
4555 <string>Length of time that notification tips stay on screen (seconds)</string> 4985 <string>Length of time that notification tips stay on screen (seconds)</string>
4556 <key>Persist</key> 4986 <key>Persist</key>
4557 <integer>1</integer> 4987 <integer>1</integer>
4558 <key>Type</key> 4988 <key>Type</key>
4559 <string>F32</string> 4989 <string>F32</string>
4560 <key>Value</key> 4990 <key>Value</key>
4561 <real>4</real> 4991 <real>4.0</real>
4562 </map> 4992 </map>
4563 <key>NumSessions</key> 4993 <key>NumSessions</key>
4564 <map> 4994 <map>
4565 <key>Comment</key> 4995 <key>Comment</key>
4566 <string>Number of successful logins to Second Life</string> 4996 <string>Number of successful logins to Second Life</string>
4567 <key>Persist</key> 4997 <key>Persist</key>
4568 <integer>1</integer> 4998 <integer>1</integer>
4569 <key>Type</key> 4999 <key>Type</key>
4570 <string>S32</string> 5000 <string>S32</string>
4571 <key>Value</key> 5001 <key>Value</key>
4572 <integer>0</integer> 5002 <integer>0</integer>
4573 </map> 5003 </map>
4574 <key>NumpadControl</key> 5004 <key>NumpadControl</key>
4575 <map> 5005 <map>
4576 <key>Comment</key> 5006 <key>Comment</key>
4577 <string>How numpad keys control your avatar. 0 = Like the normal arrow keys, 1 = Numpad moves avatar when numlock is off, 2 = Numpad moves avatar regardless of numlock (use this if you have no numlock)</string> 5007 <string>How numpad keys control your avatar. 0 = Like the normal arrow keys, 1 = Numpad moves avatar when numlock is off, 2 = Numpad moves avatar regardless of numlock (use this if you have no numlock)</string>
4578 <key>Persist</key> 5008 <key>Persist</key>
4579 <integer>1</integer> 5009 <integer>1</integer>
4580 <key>Type</key> 5010 <key>Type</key>
4581 <string>S32</string> 5011 <string>S32</string>
4582 <key>Value</key> 5012 <key>Value</key>
4583 <integer>0</integer> 5013 <integer>0</integer>
4584 </map> 5014 </map>
4585 <key>ObjectChatColor</key> 5015 <key>ObjectChatColor</key>
4586 <map> 5016 <map>
4587 <key>Comment</key> 5017 <key>Comment</key>
4588 <string>Color of chat messages from objects</string> 5018 <string>Color of chat messages from objects</string>
4589 <key>Persist</key> 5019 <key>Persist</key>
4590 <integer>1</integer> 5020 <integer>1</integer>
4591 <key>Type</key> 5021 <key>Type</key>
4592 <string>Color4</string> 5022 <string>Color4</string>
4593 <key>Value</key> 5023 <key>Value</key>
4594 <array> 5024 <array>
4595 <real>0.699999988079071044921875</real> 5025 <real>0.699999988079</real>
4596 <real>0.89999997615814208984375</real> 5026 <real>0.899999976158</real>
4597 <real>0.699999988079071044921875</real> 5027 <real>0.699999988079</real>
4598 <real>1</real> 5028 <real>1.0</real>
4599 </array> 5029 </array>
4600 </map> 5030 </map>
4601 <key>OpenDebugStatAdvanced</key> 5031 <key>OpenDebugStatAdvanced</key>
4602 <map> 5032 <map>
4603 <key>Comment</key> 5033 <key>Comment</key>
4604 <string>Expand advanced performance stats display</string> 5034 <string>Expand advanced performance stats display</string>
4605 <key>Persist</key> 5035 <key>Persist</key>
4606 <integer>1</integer> 5036 <integer>1</integer>
4607 <key>Type</key> 5037 <key>Type</key>
4608 <string>Boolean</string> 5038 <string>Boolean</string>
4609 <key>Value</key> 5039 <key>Value</key>
4610 <integer>0</integer> 5040 <integer>0</integer>
4611 </map> 5041 </map>
4612 <key>OpenDebugStatBasic</key> 5042 <key>OpenDebugStatBasic</key>
4613 <map> 5043 <map>
4614 <key>Comment</key> 5044 <key>Comment</key>
4615 <string>Expand basic performance stats display</string> 5045 <string>Expand basic performance stats display</string>
4616 <key>Persist</key> 5046 <key>Persist</key>
4617 <integer>1</integer> 5047 <integer>1</integer>
4618 <key>Type</key> 5048 <key>Type</key>
4619 <string>Boolean</string> 5049 <string>Boolean</string>
4620 <key>Value</key> 5050 <key>Value</key>
4621 <integer>1</integer> 5051 <integer>1</integer>
4622 </map> 5052 </map>
4623 <key>OpenDebugStatNet</key> 5053 <key>OpenDebugStatNet</key>
4624 <map> 5054 <map>
4625 <key>Comment</key> 5055 <key>Comment</key>
4626 <string>Expand network stats display</string> 5056 <string>Expand network stats display</string>
4627 <key>Persist</key> 5057 <key>Persist</key>
4628 <integer>1</integer> 5058 <integer>1</integer>
4629 <key>Type</key> 5059 <key>Type</key>
4630 <string>Boolean</string> 5060 <string>Boolean</string>
4631 <key>Value</key> 5061 <key>Value</key>
4632 <integer>1</integer> 5062 <integer>1</integer>
4633 </map> 5063 </map>
4634 <key>OpenDebugStatRender</key> 5064 <key>OpenDebugStatRender</key>
4635 <map> 5065 <map>
4636 <key>Comment</key> 5066 <key>Comment</key>
4637 <string>Expand render stats display</string> 5067 <string>Expand render stats display</string>
4638 <key>Persist</key> 5068 <key>Persist</key>
4639 <integer>1</integer> 5069 <integer>1</integer>
4640 <key>Type</key> 5070 <key>Type</key>
4641 <string>Boolean</string> 5071 <string>Boolean</string>
4642 <key>Value</key> 5072 <key>Value</key>
4643 <integer>1</integer> 5073 <integer>1</integer>
4644 </map> 5074 </map>
4645 <key>OpenDebugStatSim</key> 5075 <key>OpenDebugStatSim</key>
4646 <map> 5076 <map>
4647 <key>Comment</key> 5077 <key>Comment</key>
4648 <string>Expand simulator performance stats display</string> 5078 <string>Expand simulator performance stats display</string>
4649 <key>Persist</key> 5079 <key>Persist</key>
4650 <integer>1</integer> 5080 <integer>1</integer>
4651 <key>Type</key> 5081 <key>Type</key>
4652 <string>Boolean</string> 5082 <string>Boolean</string>
4653 <key>Value</key> 5083 <key>Value</key>
4654 <integer>1</integer> 5084 <integer>1</integer>
4655 </map> 5085 </map>
4656 <key>OutBandwidth</key> 5086 <key>OutBandwidth</key>
4657 <map> 5087 <map>
4658 <key>Comment</key> 5088 <key>Comment</key>
4659 <string>Outgoing bandwidth throttle (bps)</string> 5089 <string>Outgoing bandwidth throttle (bps)</string>
4660 <key>Persist</key> 5090 <key>Persist</key>
4661 <integer>1</integer> 5091 <integer>1</integer>
4662 <key>Type</key> 5092 <key>Type</key>
4663 <string>F32</string> 5093 <string>F32</string>
4664 <key>Value</key> 5094 <key>Value</key>
4665 <real>0</real> 5095 <real>0.0</real>
4666 </map> 5096 </map>
4667 <key>OverdrivenColor</key> 5097 <key>OverdrivenColor</key>
4668 <map> 5098 <map>
4669 <key>Comment</key> 5099 <key>Comment</key>
4670 <string>Color of various indicators when resident is speaking too loud.</string> 5100 <string>Color of various indicators when resident is speaking too loud.</string>
4671 <key>Persist</key> 5101 <key>Persist</key>
4672 <integer>1</integer> 5102 <integer>1</integer>
4673 <key>Type</key> 5103 <key>Type</key>
4674 <string>Color4</string> 5104 <string>Color4</string>
4675 <key>Value</key> 5105 <key>Value</key>
4676 <array> 5106 <array>
4677 <real>1</real> 5107 <real>1.0</real>
4678 <real>0</real> 5108 <real>0.0</real>
4679 <real>0</real> 5109 <real>0.0</real>
4680 <real>1</real> 5110 <real>1.0</real>
4681 </array> 5111 </array>
4682 </map> 5112 </map>
4683 <key>OverlayTitle</key> 5113 <key>OverlayTitle</key>
4684 <map> 5114 <map>
4685 <key>Comment</key> 5115 <key>Comment</key>
4686 <string>Controls watermark text message displayed on screen when &quot;ShowOverlayTitle&quot; is enabled (one word, underscores become spaces)</string> 5116 <string>Controls watermark text message displayed on screen when "ShowOverlayTitle" is enabled (one word, underscores become spaces)</string>
4687 <key>Persist</key> 5117 <key>Persist</key>
4688 <integer>1</integer> 5118 <integer>1</integer>
4689 <key>Type</key> 5119 <key>Type</key>
4690 <string>String</string> 5120 <string>String</string>
4691 <key>Value</key> 5121 <key>Value</key>
4692 <string>Set_via_OverlayTitle_in_settings.xml</string> 5122 <string>Set_via_OverlayTitle_in_settings.xml</string>
4693 </map> 5123 </map>
4694 <key>PTTCurrentlyEnabled</key> 5124 <key>PTTCurrentlyEnabled</key>
4695 <map> 5125 <map>
4696 <key>Comment</key> 5126 <key>Comment</key>
4697 <string /> 5127 <string />
4698 <key>Persist</key> 5128 <key>Persist</key>
4699 <integer>0</integer> 5129 <integer>0</integer>
4700 <key>Type</key> 5130 <key>Type</key>
4701 <string>Boolean</string> 5131 <string>Boolean</string>
4702 <key>Value</key> 5132 <key>Value</key>
4703 <integer>1</integer> 5133 <integer>1</integer>
4704 </map> 5134 </map>
4705 <key>PacketDropPercentage</key> 5135 <key>PacketDropPercentage</key>
4706 <map> 5136 <map>
4707 <key>Comment</key> 5137 <key>Comment</key>
4708 <string>Percentage of packets dropped by the client.</string> 5138 <string>Percentage of packets dropped by the client.</string>
4709 <key>Persist</key> 5139 <key>Persist</key>
4710 <integer>1</integer> 5140 <integer>1</integer>
4711 <key>Type</key> 5141 <key>Type</key>
4712 <string>F32</string> 5142 <string>F32</string>
4713 <key>Value</key> 5143 <key>Value</key>
4714 <real>0</real> 5144 <real>0.0</real>
4715 </map> 5145 </map>
5146 <key>ParcelMediaAutoPlayEnable</key>
5147 <map>
5148 <key>Comment</key>
5149 <string>Auto play parcel media when available</string>
5150 <key>Persist</key>
5151 <integer>1</integer>
5152 <key>Type</key>
5153 <string>Boolean</string>
5154 <key>Value</key>
5155 <integer>0</integer>
5156 </map>
4716 <key>PerAccountSettingsFile</key> 5157 <key>PerAccountSettingsFile</key>
4717 <map> 5158 <map>
4718 <key>Comment</key> 5159 <key>Comment</key>
4719 <string>Persisted client settings file name (per user).</string> 5160 <string>Persisted client settings file name (per user).</string>
4720 <key>Persist</key> 5161 <key>Persist</key>
4721 <integer>0</integer> 5162 <integer>0</integer>
4722 <key>Type</key> 5163 <key>Type</key>
4723 <string>String</string> 5164 <string>String</string>
4724 <key>Value</key> 5165 <key>Value</key>
4725 <string /> 5166 <string />
4726 </map> 5167 </map>
4727 <key>PermissionsCautionEnabled</key> 5168 <key>PermissionsCautionEnabled</key>
4728 <map> 5169 <map>
4729 <key>Comment</key> 5170 <key>Comment</key>
4730 <string>When enabled, changes the handling of script permission requests to help avoid accidental granting of certain permissions, such as the debit permission</string> 5171 <string>When enabled, changes the handling of script permission requests to help avoid accidental granting of certain permissions, such as the debit permission</string>
4731 <key>Persist</key> 5172 <key>Persist</key>
4732 <integer>0</integer> 5173 <integer>0</integer>
4733 <key>Type</key> 5174 <key>Type</key>
4734 <string>Boolean</string> 5175 <string>Boolean</string>
4735 <key>Value</key> 5176 <key>Value</key>
4736 <integer>1</integer> 5177 <integer>1</integer>
4737 </map> 5178 </map>
4738 <key>PermissionsCautionNotifyBoxHeight</key> 5179 <key>PermissionsCautionNotifyBoxHeight</key>
4739 <map> 5180 <map>
4740 <key>Comment</key> 5181 <key>Comment</key>
4741 <string>Height of caution-style notification messages</string> 5182 <string>Height of caution-style notification messages</string>
4742 <key>Persist</key> 5183 <key>Persist</key>
4743 <integer>0</integer> 5184 <integer>0</integer>
4744 <key>Type</key> 5185 <key>Type</key>
4745 <string>S32</string> 5186 <string>S32</string>
4746 <key>Value</key> 5187 <key>Value</key>
4747 <integer>344</integer> 5188 <integer>344</integer>
4748 </map> 5189 </map>
4749 <key>PermissionsManagerRect</key> 5190 <key>PermissionsManagerRect</key>
4750 <map> 5191 <map>
4751 <key>Comment</key> 5192 <key>Comment</key>
4752 <string>Rectangle for permissions manager window</string> 5193 <string>Rectangle for permissions manager window</string>
4753 <key>Persist</key> 5194 <key>Persist</key>
4754 <integer>1</integer> 5195 <integer>1</integer>
4755 <key>Type</key> 5196 <key>Type</key>
4756 <string>Rect</string> 5197 <string>Rect</string>
4757 <key>Value</key> 5198 <key>Value</key>
4758 <array> 5199 <array>
4759 <integer>0</integer> 5200 <integer>0</integer>
4760 <integer>85</integer> 5201 <integer>85</integer>
4761 <integer>300</integer> 5202 <integer>300</integer>
4762 <integer>0</integer> 5203 <integer>0</integer>
4763 </array> 5204 </array>
4764 </map> 5205 </map>
4765 <key>PickerContextOpacity</key> 5206 <key>PickerContextOpacity</key>
4766 <map> 5207 <map>
4767 <key>Comment</key> 5208 <key>Comment</key>
4768 <string>Controls overall opacity of context frustrum connecting color and texture pickers with their swatches</string> 5209 <string>Controls overall opacity of context frustrum connecting color and texture pickers with their swatches</string>
4769 <key>Persist</key> 5210 <key>Persist</key>
4770 <integer>1</integer> 5211 <integer>1</integer>
4771 <key>Type</key> 5212 <key>Type</key>
4772 <string>F32</string> 5213 <string>F32</string>
4773 <key>Value</key> 5214 <key>Value</key>
4774 <real>0.3499999940395355224609375</real> 5215 <real>0.34999999404</real>
4775 </map> 5216 </map>
4776 <key>PieMenuLineWidth</key> 5217 <key>PieMenuLineWidth</key>
4777 <map> 5218 <map>
4778 <key>Comment</key> 5219 <key>Comment</key>
4779 <string>Width of lines in pie menu display (pixels)</string> 5220 <string>Width of lines in pie menu display (pixels)</string>
4780 <key>Persist</key> 5221 <key>Persist</key>
4781 <integer>1</integer> 5222 <integer>1</integer>
4782 <key>Type</key> 5223 <key>Type</key>
4783 <string>F32</string> 5224 <string>F32</string>
4784 <key>Value</key> 5225 <key>Value</key>
4785 <real>2.5</real> 5226 <real>2.5</real>
4786 </map> 5227 </map>
4787 <key>PinTalkViewOpen</key> 5228 <key>PinTalkViewOpen</key>
4788 <map> 5229 <map>
4789 <key>Comment</key> 5230 <key>Comment</key>
4790 <string>Stay in IM after hitting return</string> 5231 <string>Stay in IM after hitting return</string>
4791 <key>Persist</key> 5232 <key>Persist</key>
4792 <integer>1</integer> 5233 <integer>1</integer>
4793 <key>Type</key> 5234 <key>Type</key>
4794 <string>Boolean</string> 5235 <string>Boolean</string>
4795 <key>Value</key> 5236 <key>Value</key>
4796 <integer>1</integer> 5237 <integer>1</integer>
4797 </map> 5238 </map>
4798 <key>PingInterpolate</key> 5239 <key>PingInterpolate</key>
4799 <map> 5240 <map>
4800 <key>Comment</key> 5241 <key>Comment</key>
4801 <string>Extrapolate object position along velocity vector based on ping delay</string> 5242 <string>Extrapolate object position along velocity vector based on ping delay</string>
4802 <key>Persist</key> 5243 <key>Persist</key>
4803 <integer>1</integer> 5244 <integer>1</integer>
4804 <key>Type</key> 5245 <key>Type</key>
4805 <string>Boolean</string> 5246 <string>Boolean</string>
4806 <key>Value</key> 5247 <key>Value</key>
4807 <integer>0</integer> 5248 <integer>0</integer>
4808 </map> 5249 </map>
4809 <key>PitchFromMousePosition</key> 5250 <key>PitchFromMousePosition</key>
4810 <map> 5251 <map>
4811 <key>Comment</key> 5252 <key>Comment</key>
4812 <string>Vertical range over which avatar head tracks mouse position (degrees of head rotation from top of window to bottom)</string> 5253 <string>Vertical range over which avatar head tracks mouse position (degrees of head rotation from top of window to bottom)</string>
4813 <key>Persist</key> 5254 <key>Persist</key>
4814 <integer>1</integer> 5255 <integer>1</integer>
4815 <key>Type</key> 5256 <key>Type</key>
4816 <string>F32</string> 5257 <string>F32</string>
4817 <key>Value</key> 5258 <key>Value</key>
4818 <real>90</real> 5259 <real>90.0</real>
4819 </map> 5260 </map>
4820 <key>PlayTypingAnim</key> 5261 <key>PlayTypingAnim</key>
4821 <map> 5262 <map>
4822 <key>Comment</key> 5263 <key>Comment</key>
4823 <string>Your avatar plays the typing animation whenever you type in the chat bar</string> 5264 <string>Your avatar plays the typing animation whenever you type in the chat bar</string>
4824 <key>Persist</key> 5265 <key>Persist</key>
4825 <integer>1</integer> 5266 <integer>1</integer>
4826 <key>Type</key> 5267 <key>Type</key>
4827 <string>Boolean</string> 5268 <string>Boolean</string>
4828 <key>Value</key> 5269 <key>Value</key>
4829 <integer>1</integer> 5270 <integer>1</integer>
4830 </map> 5271 </map>
4831 <key>PrecachingDelay</key> 5272 <key>PrecachingDelay</key>
4832 <map> 5273 <map>
4833 <key>Comment</key> 5274 <key>Comment</key>
4834 <string>Delay when logging in to load world before showing it (seconds)</string> 5275 <string>Delay when logging in to load world before showing it (seconds)</string>
4835 <key>Persist</key> 5276 <key>Persist</key>
4836 <integer>1</integer> 5277 <integer>1</integer>
4837 <key>Type</key> 5278 <key>Type</key>
4838 <string>F32</string> 5279 <string>F32</string>
4839 <key>Value</key> 5280 <key>Value</key>
4840 <real>6</real> 5281 <real>6.0</real>
4841 </map> 5282 </map>
4842 <key>PreviewAnimRect</key> 5283 <key>PreviewAnimRect</key>
4843 <map> 5284 <map>
4844 <key>Comment</key> 5285 <key>Comment</key>
4845 <string>Rectangle for animation preview window</string> 5286 <string>Rectangle for animation preview window</string>
4846 <key>Persist</key> 5287 <key>Persist</key>
4847 <integer>1</integer> 5288 <integer>1</integer>
4848 <key>Type</key> 5289 <key>Type</key>
4849 <string>Rect</string> 5290 <string>Rect</string>
4850 <key>Value</key> 5291 <key>Value</key>
4851 <array> 5292 <array>
4852 <integer>0</integer> 5293 <integer>0</integer>
4853 <integer>85</integer> 5294 <integer>85</integer>
4854 <integer>300</integer> 5295 <integer>300</integer>
4855 <integer>0</integer> 5296 <integer>0</integer>
4856 </array> 5297 </array>
4857 </map> 5298 </map>
4858 <key>PreviewClassifiedRect</key> 5299 <key>PreviewClassifiedRect</key>
4859 <map> 5300 <map>
4860 <key>Comment</key> 5301 <key>Comment</key>
4861 <string>Rectangle for URL preview window</string> 5302 <string>Rectangle for URL preview window</string>
4862 <key>Persist</key> 5303 <key>Persist</key>
4863 <integer>1</integer> 5304 <integer>1</integer>
4864 <key>Type</key> 5305 <key>Type</key>
4865 <string>Rect</string> 5306 <string>Rect</string>
4866 <key>Value</key> 5307 <key>Value</key>
4867 <array> 5308 <array>
4868 <integer>0</integer> 5309 <integer>0</integer>
4869 <integer>530</integer> 5310 <integer>530</integer>
4870 <integer>420</integer> 5311 <integer>420</integer>
4871 <integer>0</integer> 5312 <integer>0</integer>
4872 </array> 5313 </array>
4873 </map> 5314 </map>
4874 <key>PreviewEventRect</key> 5315 <key>PreviewEventRect</key>
4875 <map> 5316 <map>
4876 <key>Comment</key> 5317 <key>Comment</key>
4877 <string>Rectangle for Event preview window</string> 5318 <string>Rectangle for Event preview window</string>
4878 <key>Persist</key> 5319 <key>Persist</key>
4879 <integer>1</integer> 5320 <integer>1</integer>
4880 <key>Type</key> 5321 <key>Type</key>
4881 <string>Rect</string> 5322 <string>Rect</string>
4882 <key>Value</key> 5323 <key>Value</key>
4883 <array> 5324 <array>
4884 <integer>0</integer> 5325 <integer>0</integer>
4885 <integer>530</integer> 5326 <integer>530</integer>
4886 <integer>420</integer> 5327 <integer>420</integer>
4887 <integer>0</integer> 5328 <integer>0</integer>
4888 </array> 5329 </array>
4889 </map> 5330 </map>
4890 <key>PreviewLandmarkRect</key> 5331 <key>PreviewLandmarkRect</key>
4891 <map> 5332 <map>
4892 <key>Comment</key> 5333 <key>Comment</key>
4893 <string>Rectangle for landmark preview window</string> 5334 <string>Rectangle for landmark preview window</string>
4894 <key>Persist</key> 5335 <key>Persist</key>
4895 <integer>1</integer> 5336 <integer>1</integer>
4896 <key>Type</key> 5337 <key>Type</key>
4897 <string>Rect</string> 5338 <string>Rect</string>
4898 <key>Value</key> 5339 <key>Value</key>
4899 <array> 5340 <array>
4900 <integer>0</integer> 5341 <integer>0</integer>
4901 <integer>90</integer> 5342 <integer>90</integer>
4902 <integer>300</integer> 5343 <integer>300</integer>
4903 <integer>0</integer> 5344 <integer>0</integer>
4904 </array> 5345 </array>
4905 </map> 5346 </map>
4906 <key>PreviewObjectRect</key> 5347 <key>PreviewObjectRect</key>
4907 <map> 5348 <map>
4908 <key>Comment</key> 5349 <key>Comment</key>
4909 <string>Rectangle for object preview window</string> 5350 <string>Rectangle for object preview window</string>
4910 <key>Persist</key> 5351 <key>Persist</key>
4911 <integer>1</integer> 5352 <integer>1</integer>
4912 <key>Type</key> 5353 <key>Type</key>
4913 <string>Rect</string> 5354 <string>Rect</string>
4914 <key>Value</key> 5355 <key>Value</key>
4915 <array> 5356 <array>
4916 <integer>0</integer> 5357 <integer>0</integer>
4917 <integer>85</integer> 5358 <integer>85</integer>
4918 <integer>300</integer> 5359 <integer>300</integer>
4919 <integer>0</integer> 5360 <integer>0</integer>
4920 </array> 5361 </array>
4921 </map> 5362 </map>
4922 <key>PreviewScriptRect</key> 5363 <key>PreviewScriptRect</key>
4923 <map> 5364 <map>
4924 <key>Comment</key> 5365 <key>Comment</key>
4925 <string>Rectangle for script preview window</string> 5366 <string>Rectangle for script preview window</string>
4926 <key>Persist</key> 5367 <key>Persist</key>
4927 <integer>1</integer> 5368 <integer>1</integer>
4928 <key>Type</key> 5369 <key>Type</key>
4929 <string>Rect</string> 5370 <string>Rect</string>
4930 <key>Value</key> 5371 <key>Value</key>
4931 <array> 5372 <array>
4932 <integer>0</integer> 5373 <integer>0</integer>
4933 <integer>550</integer> 5374 <integer>550</integer>
4934 <integer>500</integer> 5375 <integer>500</integer>
4935 <integer>0</integer> 5376 <integer>0</integer>
4936 </array> 5377 </array>
4937 </map> 5378 </map>
4938 <key>PreviewSoundRect</key> 5379 <key>PreviewSoundRect</key>
4939 <map> 5380 <map>
4940 <key>Comment</key> 5381 <key>Comment</key>
4941 <string>Rectangle for sound preview window</string> 5382 <string>Rectangle for sound preview window</string>
4942 <key>Persist</key> 5383 <key>Persist</key>
4943 <integer>1</integer> 5384 <integer>1</integer>
4944 <key>Type</key> 5385 <key>Type</key>
4945 <string>Rect</string> 5386 <string>Rect</string>
4946 <key>Value</key> 5387 <key>Value</key>
4947 <array> 5388 <array>
4948 <integer>0</integer> 5389 <integer>0</integer>
4949 <integer>85</integer> 5390 <integer>85</integer>
4950 <integer>300</integer> 5391 <integer>300</integer>
4951 <integer>0</integer> 5392 <integer>0</integer>
4952 </array> 5393 </array>
4953 </map> 5394 </map>
4954 <key>PreviewTextureRect</key> 5395 <key>PreviewTextureRect</key>
4955 <map> 5396 <map>
4956 <key>Comment</key> 5397 <key>Comment</key>
4957 <string>Rectangle for texture preview window</string> 5398 <string>Rectangle for texture preview window</string>
4958 <key>Persist</key> 5399 <key>Persist</key>
4959 <integer>1</integer> 5400 <integer>1</integer>
4960 <key>Type</key> 5401 <key>Type</key>
4961 <string>Rect</string> 5402 <string>Rect</string>
4962 <key>Value</key> 5403 <key>Value</key>
4963 <array> 5404 <array>
4964 <integer>0</integer> 5405 <integer>0</integer>
4965 <integer>400</integer> 5406 <integer>400</integer>
4966 <integer>400</integer> 5407 <integer>400</integer>
4967 <integer>0</integer> 5408 <integer>0</integer>
4968 </array> 5409 </array>
4969 </map> 5410 </map>
4970 <key>PreviewURLRect</key> 5411 <key>PreviewURLRect</key>
4971 <map> 5412 <map>
4972 <key>Comment</key> 5413 <key>Comment</key>
4973 <string>Rectangle for URL preview window</string> 5414 <string>Rectangle for URL preview window</string>
4974 <key>Persist</key> 5415 <key>Persist</key>
4975 <integer>1</integer> 5416 <integer>1</integer>
4976 <key>Type</key> 5417 <key>Type</key>
4977 <string>Rect</string> 5418 <string>Rect</string>
4978 <key>Value</key> 5419 <key>Value</key>
4979 <array> 5420 <array>
4980 <integer>0</integer> 5421 <integer>0</integer>
4981 <integer>90</integer> 5422 <integer>90</integer>
4982 <integer>300</integer> 5423 <integer>300</integer>
4983 <integer>0</integer> 5424 <integer>0</integer>
4984 </array> 5425 </array>
4985 </map> 5426 </map>
4986 <key>PreviewWearableRect</key> 5427 <key>PreviewWearableRect</key>
4987 <map> 5428 <map>
4988 <key>Comment</key> 5429 <key>Comment</key>
4989 <string>Rectangle for wearable preview window</string> 5430 <string>Rectangle for wearable preview window</string>
4990 <key>Persist</key> 5431 <key>Persist</key>
4991 <integer>1</integer> 5432 <integer>1</integer>
4992 <key>Type</key> 5433 <key>Type</key>
4993 <string>Rect</string> 5434 <string>Rect</string>
4994 <key>Value</key> 5435 <key>Value</key>
4995 <array> 5436 <array>
4996 <integer>0</integer> 5437 <integer>0</integer>
4997 <integer>85</integer> 5438 <integer>85</integer>
4998 <integer>300</integer> 5439 <integer>300</integer>
4999 <integer>0</integer> 5440 <integer>0</integer>
5000 </array> 5441 </array>
5001 </map> 5442 </map>
5002 <key>ProbeHardwareOnStartup</key> 5443 <key>ProbeHardwareOnStartup</key>
5003 <map> 5444 <map>
5004 <key>Comment</key> 5445 <key>Comment</key>
5005 <string>Query current hardware configuration on application startup</string> 5446 <string>Query current hardware configuration on application startup</string>
5006 <key>Persist</key> 5447 <key>Persist</key>
5007 <integer>1</integer> 5448 <integer>1</integer>
5008 <key>Type</key> 5449 <key>Type</key>
5009 <string>Boolean</string> 5450 <string>Boolean</string>
5010 <key>Value</key> 5451 <key>Value</key>
5011 <integer>1</integer> 5452 <integer>1</integer>
5012 </map> 5453 </map>
5013 <key>PropertiesRect</key> 5454 <key>PropertiesRect</key>
5014 <map> 5455 <map>
5015 <key>Comment</key> 5456 <key>Comment</key>
5016 <string>Rectangle for inventory item properties window</string> 5457 <string>Rectangle for inventory item properties window</string>
5017 <key>Persist</key> 5458 <key>Persist</key>
5018 <integer>1</integer> 5459 <integer>1</integer>
5019 <key>Type</key> 5460 <key>Type</key>
5020 <string>Rect</string> 5461 <string>Rect</string>
5021 <key>Value</key> 5462 <key>Value</key>
5022 <array> 5463 <array>
5023 <integer>0</integer> 5464 <integer>0</integer>
5024 <integer>320</integer> 5465 <integer>320</integer>
5025 <integer>350</integer> 5466 <integer>350</integer>
5026 <integer>0</integer> 5467 <integer>0</integer>
5027 </array> 5468 </array>
5028 </map> 5469 </map>
5029 <key>PurgeCacheOnNextStartup</key> 5470 <key>PurgeCacheOnNextStartup</key>
5030 <map> 5471 <map>
5031 <key>Comment</key> 5472 <key>Comment</key>
5032 <string>Clear local file cache next time viewer is run</string> 5473 <string>Clear local file cache next time viewer is run</string>
5033 <key>Persist</key> 5474 <key>Persist</key>
5034 <integer>1</integer> 5475 <integer>1</integer>
5035 <key>Type</key> 5476 <key>Type</key>
5036 <string>Boolean</string> 5477 <string>Boolean</string>
5037 <key>Value</key> 5478 <key>Value</key>
5038 <integer>0</integer> 5479 <integer>0</integer>
5039 </map> 5480 </map>
5040 <key>PurgeCacheOnStartup</key> 5481 <key>PurgeCacheOnStartup</key>
5041 <map> 5482 <map>
5042 <key>Comment</key> 5483 <key>Comment</key>
5043 <string>Clear local file cache every time viewer is run</string> 5484 <string>Clear local file cache every time viewer is run</string>
5044 <key>Persist</key> 5485 <key>Persist</key>
5045 <integer>1</integer> 5486 <integer>1</integer>
5046 <key>Type</key> 5487 <key>Type</key>
5047 <string>Boolean</string> 5488 <string>Boolean</string>
5048 <key>Value</key> 5489 <key>Value</key>
5049 <integer>0</integer> 5490 <integer>0</integer>
5050 </map> 5491 </map>
5051 <key>PushToTalkButton</key> 5492 <key>PushToTalkButton</key>
5052 <map> 5493 <map>
5053 <key>Comment</key> 5494 <key>Comment</key>
5054 <string>Which button or keyboard key is used for push-to-talk</string> 5495 <string>Which button or keyboard key is used for push-to-talk</string>
5055 <key>Persist</key> 5496 <key>Persist</key>
5056 <integer>1</integer> 5497 <integer>1</integer>
5057 <key>Type</key> 5498 <key>Type</key>
5058 <string>String</string> 5499 <string>String</string>
5059 <key>Value</key> 5500 <key>Value</key>
5060 <string>MiddleMouse</string> 5501 <string>MiddleMouse</string>
5061 </map> 5502 </map>
5062 <key>PushToTalkToggle</key> 5503 <key>PushToTalkToggle</key>
5063 <map> 5504 <map>
5064 <key>Comment</key> 5505 <key>Comment</key>
5065 <string>Should the push-to-talk button behave as a toggle</string> 5506 <string>Should the push-to-talk button behave as a toggle</string>
5066 <key>Persist</key> 5507 <key>Persist</key>
5067 <integer>1</integer> 5508 <integer>1</integer>
5068 <key>Type</key> 5509 <key>Type</key>
5069 <string>Boolean</string> 5510 <string>Boolean</string>
5070 <key>Value</key> 5511 <key>Value</key>
5071 <integer>0</integer> 5512 <integer>0</integer>
5072 </map> 5513 </map>
5073 <key>QAMode</key> 5514 <key>QAMode</key>
5074 <map> 5515 <map>
5075 <key>Comment</key> 5516 <key>Comment</key>
5076 <string>Enable Testing Features.</string> 5517 <string>Enable Testing Features.</string>
5077 <key>Persist</key> 5518 <key>Persist</key>
5078 <integer>1</integer> 5519 <integer>1</integer>
5079 <key>Type</key> 5520 <key>Type</key>
5080 <string>Boolean</string> 5521 <string>Boolean</string>
5081 <key>Value</key> 5522 <key>Value</key>
5082 <integer>0</integer> 5523 <integer>0</integer>
5083 </map> 5524 </map>
5084 <key>QuietSnapshotsToDisk</key> 5525 <key>QuietSnapshotsToDisk</key>
5085 <map> 5526 <map>
5086 <key>Comment</key> 5527 <key>Comment</key>
5087 <string>Take snapshots to disk without playing animation or sound</string> 5528 <string>Take snapshots to disk without playing animation or sound</string>
5088 <key>Persist</key> 5529 <key>Persist</key>
5089 <integer>1</integer> 5530 <integer>1</integer>
5090 <key>Type</key> 5531 <key>Type</key>
5091 <string>Boolean</string> 5532 <string>Boolean</string>
5092 <key>Value</key> 5533 <key>Value</key>
5093 <integer>0</integer> 5534 <integer>0</integer>
5094 </map> 5535 </map>
5095 <key>QuitAfterSeconds</key> 5536 <key>QuitAfterSeconds</key>
5096 <map> 5537 <map>
5097 <key>Comment</key> 5538 <key>Comment</key>
5098 <string>The duration allowed before quitting.</string> 5539 <string>The duration allowed before quitting.</string>
5099 <key>Persist</key> 5540 <key>Persist</key>
5100 <integer>1</integer> 5541 <integer>1</integer>
5101 <key>Type</key> 5542 <key>Type</key>
5102 <string>F32</string> 5543 <string>F32</string>
5103 <key>Value</key> 5544 <key>Value</key>
5104 <real>0</real> 5545 <real>0.0</real>
5105 </map> 5546 </map>
5106 <key>RadioLandBrushAction</key> 5547 <key>RadioLandBrushAction</key>
5107 <map> 5548 <map>
5108 <key>Comment</key> 5549 <key>Comment</key>
5109 <string>Last selected land modification operation (0 = flatten, 1 = raise, 2 = lower, 3 = smooth, 4 = roughen, 5 = revert)</string> 5550 <string>Last selected land modification operation (0 = flatten, 1 = raise, 2 = lower, 3 = smooth, 4 = roughen, 5 = revert)</string>
5110 <key>Persist</key> 5551 <key>Persist</key>
5111 <integer>1</integer> 5552 <integer>1</integer>
5112 <key>Type</key> 5553 <key>Type</key>
5113 <string>S32</string> 5554 <string>S32</string>
5114 <key>Value</key> 5555 <key>Value</key>
5115 <integer>0</integer> 5556 <integer>0</integer>
5116 </map> 5557 </map>
5117 <key>RadioLandBrushSize</key> 5558 <key>RadioLandBrushSize</key>
5118 <map> 5559 <map>
5119 <key>Comment</key> 5560 <key>Comment</key>
5120 <string>Size of land modification brush (0 = small, 1 = medium, 2 = large)</string> 5561 <string>Size of land modification brush (0 = small, 1 = medium, 2 = large)</string>
5121 <key>Persist</key> 5562 <key>Persist</key>
5122 <integer>1</integer> 5563 <integer>1</integer>
5123 <key>Type</key> 5564 <key>Type</key>
5124 <string>S32</string> 5565 <string>S32</string>
5125 <key>Value</key> 5566 <key>Value</key>
5126 <integer>0</integer> 5567 <integer>0</integer>
5127 </map> 5568 </map>
5128 <key>RecentItemsSortOrder</key> 5569 <key>RecentItemsSortOrder</key>
5129 <map> 5570 <map>
5130 <key>Comment</key> 5571 <key>Comment</key>
5131 <string>Specifies sort key for recent inventory items (+0 = name, +1 = date, +2 = folders always by name, +4 = system folders to top)</string> 5572 <string>Specifies sort key for recent inventory items (+0 = name, +1 = date, +2 = folders always by name, +4 = system folders to top)</string>
5132 <key>Persist</key> 5573 <key>Persist</key>
5133 <integer>1</integer> 5574 <integer>1</integer>
5134 <key>Type</key> 5575 <key>Type</key>
5135 <string>U32</string> 5576 <string>U32</string>
5136 <key>Value</key> 5577 <key>Value</key>
5137 <integer>1</integer> 5578 <integer>1</integer>
5138 </map> 5579 </map>
5139 <key>RectangleSelectInclusive</key> 5580 <key>RectangleSelectInclusive</key>
5140 <map> 5581 <map>
5141 <key>Comment</key> 5582 <key>Comment</key>
5142 <string>Select objects that have at least one vertex inside selection rectangle</string> 5583 <string>Select objects that have at least one vertex inside selection rectangle</string>
5143 <key>Persist</key> 5584 <key>Persist</key>
5144 <integer>1</integer> 5585 <integer>1</integer>
5145 <key>Type</key> 5586 <key>Type</key>
5146 <string>Boolean</string> 5587 <string>Boolean</string>
5147 <key>Value</key> 5588 <key>Value</key>
5148 <integer>1</integer> 5589 <integer>1</integer>
5149 </map> 5590 </map>
5150 <key>RegionTextureSize</key> 5591 <key>RegionTextureSize</key>
5151 <map> 5592 <map>
5152 <key>Comment</key> 5593 <key>Comment</key>
5153 <string>Terrain texture dimensions (power of 2)</string> 5594 <string>Terrain texture dimensions (power of 2)</string>
5154 <key>Persist</key> 5595 <key>Persist</key>
5155 <integer>1</integer> 5596 <integer>1</integer>
5156 <key>Type</key> 5597 <key>Type</key>
5157 <string>U32</string> 5598 <string>U32</string>
5158 <key>Value</key> 5599 <key>Value</key>
5159 <integer>256</integer> 5600 <integer>256</integer>
5160 </map> 5601 </map>
5161 <key>RememberPassword</key> 5602 <key>RememberPassword</key>
5162 <map> 5603 <map>
5163 <key>Comment</key> 5604 <key>Comment</key>
5164 <string>Keep password (in encrypted form) for next login</string> 5605 <string>Keep password (in encrypted form) for next login</string>
5165 <key>Persist</key> 5606 <key>Persist</key>
5166 <integer>1</integer> 5607 <integer>1</integer>
5167 <key>Type</key> 5608 <key>Type</key>
5168 <string>Boolean</string> 5609 <string>Boolean</string>
5169 <key>Value</key> 5610 <key>Value</key>
5170 <integer>1</integer> 5611 <integer>1</integer>
5171 </map> 5612 </map>
5172 <key>RenderAnisotropic</key> 5613 <key>RenderAnisotropic</key>
5173 <map> 5614 <map>
5174 <key>Comment</key> 5615 <key>Comment</key>
5175 <string>Render textures using anisotropic filtering</string> 5616 <string>Render textures using anisotropic filtering</string>
5176 <key>Persist</key> 5617 <key>Persist</key>
5177 <integer>1</integer> 5618 <integer>1</integer>
5178 <key>Type</key> 5619 <key>Type</key>
5179 <string>Boolean</string> 5620 <string>Boolean</string>
5180 <key>Value</key> 5621 <key>Value</key>
5181 <integer>0</integer> 5622 <integer>0</integer>
5182 </map> 5623 </map>
5183 <key>RenderAppleUseMultGL</key> 5624 <key>RenderAppleUseMultGL</key>
5184 <map> 5625 <map>
5185 <key>Comment</key> 5626 <key>Comment</key>
5186 <string>Whether we want to use multi-threaded OpenGL on Apple hardware (requires restart of SL).</string> 5627 <string>Whether we want to use multi-threaded OpenGL on Apple hardware (requires restart of SL).</string>
5187 <key>Persist</key> 5628 <key>Persist</key>
5188 <integer>1</integer> 5629 <integer>1</integer>
5189 <key>Type</key> 5630 <key>Type</key>
5190 <string>Boolean</string> 5631 <string>Boolean</string>
5191 <key>Value</key> 5632 <key>Value</key>
5192 <integer>0</integer> 5633 <integer>0</integer>
5193 </map> 5634 </map>
5194 <key>RenderAvatarCloth</key> 5635 <key>RenderAvatarCloth</key>
5195 <map> 5636 <map>
5196 <key>Comment</key> 5637 <key>Comment</key>
5197 <string>Controls if avatars use wavy cloth</string> 5638 <string>Controls if avatars use wavy cloth</string>
5198 <key>Persist</key> 5639 <key>Persist</key>
5199 <integer>1</integer> 5640 <integer>1</integer>
5200 <key>Type</key> 5641 <key>Type</key>
5201 <string>Boolean</string> 5642 <string>Boolean</string>
5202 <key>Value</key> 5643 <key>Value</key>
5203 <integer>1</integer> 5644 <integer>1</integer>
5204 </map> 5645 </map>
5205 <key>RenderAvatarLODFactor</key> 5646 <key>RenderAvatarLODFactor</key>
5206 <map> 5647 <map>
5207 <key>Comment</key> 5648 <key>Comment</key>
5208 <string>Controls level of detail of avatars (multiplier for current screen area when calculated level of detail)</string> 5649 <string>Controls level of detail of avatars (multiplier for current screen area when calculated level of detail)</string>
5209 <key>Persist</key> 5650 <key>Persist</key>
5210 <integer>1</integer> 5651 <integer>1</integer>
5211 <key>Type</key> 5652 <key>Type</key>
5212 <string>F32</string> 5653 <string>F32</string>
5213 <key>Value</key> 5654 <key>Value</key>
5214 <real>0.5</real> 5655 <real>0.5</real>
5215 </map> 5656 </map>
5216 <key>RenderAvatarMaxVisible</key> 5657 <key>RenderAvatarMaxVisible</key>
5217 <map> 5658 <map>
5218 <key>Comment</key> 5659 <key>Comment</key>
5219 <string>Maximum number of avatars to display at any one time</string> 5660 <string>Maximum number of avatars to display at any one time</string>
5220 <key>Persist</key> 5661 <key>Persist</key>
5221 <integer>1</integer> 5662 <integer>1</integer>
5222 <key>Type</key> 5663 <key>Type</key>
5223 <string>S32</string> 5664 <string>S32</string>
5224 <key>Value</key> 5665 <key>Value</key>
5225 <integer>35</integer> 5666 <integer>35</integer>
5226 </map> 5667 </map>
5227 <key>RenderAvatarVP</key> 5668 <key>RenderAvatarVP</key>
5228 <map> 5669 <map>
5229 <key>Comment</key> 5670 <key>Comment</key>
5230 <string>Use vertex programs to perform hardware skinning of avatar</string> 5671 <string>Use vertex programs to perform hardware skinning of avatar</string>
5231 <key>Persist</key> 5672 <key>Persist</key>
5232 <integer>1</integer> 5673 <integer>1</integer>
5233 <key>Type</key> 5674 <key>Type</key>
5234 <string>Boolean</string> 5675 <string>Boolean</string>
5235 <key>Value</key> 5676 <key>Value</key>
5236 <integer>1</integer> 5677 <integer>1</integer>
5237 </map> 5678 </map>
5238 <key>RenderBumpmapMinDistanceSquared</key> 5679 <key>RenderBumpmapMinDistanceSquared</key>
5239 <map> 5680 <map>
5240 <key>Comment</key> 5681 <key>Comment</key>
5241 <string>Maximum distance at which to render bumpmapped primitives (distance in meters, squared)</string> 5682 <string>Maximum distance at which to render bumpmapped primitives (distance in meters, squared)</string>
5242 <key>Persist</key> 5683 <key>Persist</key>
5243 <integer>1</integer> 5684 <integer>1</integer>
5244 <key>Type</key> 5685 <key>Type</key>
5245 <string>F32</string> 5686 <string>F32</string>
5246 <key>Value</key> 5687 <key>Value</key>
5247 <real>100</real> 5688 <real>100.0</real>
5248 </map> 5689 </map>
5249 <key>RenderCubeMap</key> 5690 <key>RenderCubeMap</key>
5250 <map> 5691 <map>
5251 <key>Comment</key> 5692 <key>Comment</key>
5252 <string>Whether we can render the cube map or not</string> 5693 <string>Whether we can render the cube map or not</string>
5253 <key>Persist</key> 5694 <key>Persist</key>
5254 <integer>1</integer> 5695 <integer>1</integer>
5255 <key>Type</key> 5696 <key>Type</key>
5256 <string>Boolean</string> 5697 <string>Boolean</string>
5257 <key>Value</key> 5698 <key>Value</key>
5258 <integer>1</integer> 5699 <integer>1</integer>
5259 </map> 5700 </map>
5260 <key>RenderCustomSettings</key> 5701 <key>RenderCustomSettings</key>
5261 <map> 5702 <map>
5262 <key>Comment</key> 5703 <key>Comment</key>
5263 <string>Do you want to set the graphics settings yourself</string> 5704 <string>Do you want to set the graphics settings yourself</string>
5264 <key>Persist</key> 5705 <key>Persist</key>
5265 <integer>1</integer> 5706 <integer>1</integer>
5266 <key>Type</key> 5707 <key>Type</key>
5267 <string>Boolean</string> 5708 <string>Boolean</string>
5268 <key>Value</key> 5709 <key>Value</key>
5269 <integer>0</integer> 5710 <integer>0</integer>
5270 </map> 5711 </map>
5712 <key>RenderDebugGL</key>
5713 <map>
5714 <key>Comment</key>
5715 <string>Enable strict GL debugging.</string>
5716 <key>Persist</key>
5717 <integer>1</integer>
5718 <key>Type</key>
5719 <string>Boolean</string>
5720 <key>Value</key>
5721 <integer>0</integer>
5722 </map>
5723 <key>RenderDebugPipeline</key>
5724 <map>
5725 <key>Comment</key>
5726 <string>Enable strict pipeline debugging.</string>
5727 <key>Persist</key>
5728 <integer>1</integer>
5729 <key>Type</key>
5730 <string>Boolean</string>
5731 <key>Value</key>
5732 <integer>0</integer>
5733 </map>
5271 <key>RenderDebugTextureBind</key> 5734 <key>RenderDebugTextureBind</key>
5272 <map> 5735 <map>
5273 <key>Comment</key> 5736 <key>Comment</key>
5274 <string>Enable texture bind performance test.</string> 5737 <string>Enable texture bind performance test.</string>
5275 <key>Persist</key> 5738 <key>Persist</key>
5276 <integer>1</integer> 5739 <integer>1</integer>
5277 <key>Type</key> 5740 <key>Type</key>
5278 <string>Boolean</string> 5741 <string>Boolean</string>
5279 <key>Value</key> 5742 <key>Value</key>
5280 <integer>0</integer> 5743 <integer>0</integer>
5281 </map> 5744 </map>
5745 <key>RenderDeferred</key>
5746 <map>
5747 <key>Comment</key>
5748 <string>Use deferred rendering pipeline.</string>
5749 <key>Persist</key>
5750 <integer>1</integer>
5751 <key>Type</key>
5752 <string>Boolean</string>
5753 <key>Value</key>
5754 <integer>0</integer>
5755 </map>
5282 <key>RenderDynamicLOD</key> 5756 <key>RenderDynamicLOD</key>
5283 <map> 5757 <map>
5284 <key>Comment</key> 5758 <key>Comment</key>
5285 <string>Dynamically adjust level of detail.</string> 5759 <string>Dynamically adjust level of detail.</string>
5286 <key>Persist</key> 5760 <key>Persist</key>
5287 <integer>1</integer> 5761 <integer>1</integer>
5288 <key>Type</key> 5762 <key>Type</key>
5289 <string>Boolean</string> 5763 <string>Boolean</string>
5290 <key>Value</key> 5764 <key>Value</key>
5291 <integer>1</integer> 5765 <integer>1</integer>
5292 </map> 5766 </map>
5293 <key>RenderDynamicReflections</key> 5767 <key>RenderDynamicReflections</key>
5294 <map> 5768 <map>
5295 <key>Comment</key> 5769 <key>Comment</key>
5296 <string>Generate a dynamic cube map for reflections (objects reflect their environment, experimental).</string> 5770 <string>Generate a dynamic cube map for reflections (objects reflect their environment, experimental).</string>
5297 <key>Persist</key> 5771 <key>Persist</key>
5298 <integer>1</integer> 5772 <integer>1</integer>
5299 <key>Type</key> 5773 <key>Type</key>
5300 <string>Boolean</string> 5774 <string>Boolean</string>
5301 <key>Value</key> 5775 <key>Value</key>
5302 <integer>0</integer> 5776 <integer>0</integer>
5303 </map> 5777 </map>
5778 <key>RenderFSAASamples</key>
5779 <map>
5780 <key>Comment</key>
5781 <string>Number of samples to use for FSAA (0 = no AA).</string>
5782 <key>Persist</key>
5783 <integer>1</integer>
5784 <key>Type</key>
5785 <string>U32</string>
5786 <key>Value</key>
5787 <integer>0</integer>
5788 </map>
5304 <key>RenderFarClip</key> 5789 <key>RenderFarClip</key>
5305 <map> 5790 <map>
5306 <key>Comment</key> 5791 <key>Comment</key>
5307 <string>Distance of far clip plane from camera (meters)</string> 5792 <string>Distance of far clip plane from camera (meters)</string>
5308 <key>Persist</key> 5793 <key>Persist</key>
5309 <integer>1</integer> 5794 <integer>1</integer>
5310 <key>Type</key> 5795 <key>Type</key>
5311 <string>F32</string> 5796 <string>F32</string>
5312 <key>Value</key> 5797 <key>Value</key>
5313 <real>256</real> 5798 <real>256.0</real>
5314 </map> 5799 </map>
5800 <key>RenderFastAlpha</key>
5801 <map>
5802 <key>Comment</key>
5803 <string>Use lossy alpha rendering optimization (opaque/nonexistent small alpha faces).</string>
5804 <key>Persist</key>
5805 <integer>1</integer>
5806 <key>Type</key>
5807 <string>Boolean</string>
5808 <key>Value</key>
5809 <integer>0</integer>
5810 </map>
5315 <key>RenderFastUI</key> 5811 <key>RenderFastUI</key>
5316 <map> 5812 <map>
5317 <key>Comment</key> 5813 <key>Comment</key>
5318 <string>[NOT USED]</string> 5814 <string>[NOT USED]</string>
5319 <key>Persist</key> 5815 <key>Persist</key>
5320 <integer>1</integer> 5816 <integer>1</integer>
5321 <key>Type</key> 5817 <key>Type</key>
5322 <string>Boolean</string> 5818 <string>Boolean</string>
5323 <key>Value</key> 5819 <key>Value</key>
5324 <integer>0</integer> 5820 <integer>0</integer>
5325 </map> 5821 </map>
5326 <key>RenderFlexTimeFactor</key> 5822 <key>RenderFlexTimeFactor</key>
5327 <map> 5823 <map>
5328 <key>Comment</key> 5824 <key>Comment</key>
5329 <string>Controls level of detail of flexible objects (multiplier for amount of time spent processing flex objects)</string> 5825 <string>Controls level of detail of flexible objects (multiplier for amount of time spent processing flex objects)</string>
5330 <key>Persist</key> 5826 <key>Persist</key>
5331 <integer>1</integer> 5827 <integer>1</integer>
5332 <key>Type</key> 5828 <key>Type</key>
5333 <string>F32</string> 5829 <string>F32</string>
5334 <key>Value</key> 5830 <key>Value</key>
5335 <real>1</real> 5831 <real>1.0</real>
5336 </map> 5832 </map>
5337 <key>RenderFogRatio</key> 5833 <key>RenderFogRatio</key>
5338 <map> 5834 <map>
5339 <key>Comment</key> 5835 <key>Comment</key>
5340 <string>Distance from camera where fog reaches maximum density (fraction or multiple of far clip distance)</string> 5836 <string>Distance from camera where fog reaches maximum density (fraction or multiple of far clip distance)</string>
5341 <key>Persist</key> 5837 <key>Persist</key>
5342 <integer>1</integer> 5838 <integer>1</integer>
5343 <key>Type</key> 5839 <key>Type</key>
5344 <string>F32</string> 5840 <string>F32</string>
5345 <key>Value</key> 5841 <key>Value</key>
5346 <real>4.0</real> 5842 <real>4.0</real>
5347 </map> 5843 </map>
5348 <key>RenderGamma</key> 5844 <key>RenderGamma</key>
5349 <map> 5845 <map>
5350 <key>Comment</key> 5846 <key>Comment</key>
5351 <string>Sets gamma exponent for renderer</string> 5847 <string>Sets gamma exponent for renderer</string>
5352 <key>Persist</key> 5848 <key>Persist</key>
5353 <integer>1</integer> 5849 <integer>1</integer>
5354 <key>Type</key> 5850 <key>Type</key>
5355 <string>F32</string> 5851 <string>F32</string>
5356 <key>Value</key> 5852 <key>Value</key>
5357 <real>0</real> 5853 <real>0.0</real>
5358 </map> 5854 </map>
5359 <key>RenderGammaFull</key> 5855 <key>RenderGammaFull</key>
5360 <map> 5856 <map>
5361 <key>Comment</key> 5857 <key>Comment</key>
5362 <string>Use fully controllable gamma correction, instead of faster, hard-coded gamma correction of 2.</string> 5858 <string>Use fully controllable gamma correction, instead of faster, hard-coded gamma correction of 2.</string>
5363 <key>Persist</key> 5859 <key>Persist</key>
5364 <integer>1</integer> 5860 <integer>1</integer>
5365 <key>Type</key> 5861 <key>Type</key>
5366 <string>Boolean</string> 5862 <string>Boolean</string>
5367 <key>Value</key> 5863 <key>Value</key>
5368 <real>1</real> 5864 <real>1.0</real>
5369 </map> 5865 </map>
5370 <key>RenderGlow</key> 5866 <key>RenderGlow</key>
5371 <map> 5867 <map>
5372 <key>Comment</key> 5868 <key>Comment</key>
5373 <string>Render bloom post effect.</string> 5869 <string>Render bloom post effect.</string>
5374 <key>Persist</key> 5870 <key>Persist</key>
5375 <integer>1</integer> 5871 <integer>1</integer>
5376 <key>Type</key> 5872 <key>Type</key>
5377 <string>Boolean</string> 5873 <string>Boolean</string>
5378 <key>Value</key> 5874 <key>Value</key>
5379 <integer>1</integer> 5875 <integer>1</integer>
5380 </map> 5876 </map>
5381 <key>RenderGlowIterations</key> 5877 <key>RenderGlowIterations</key>
5382 <map> 5878 <map>
5383 <key>Comment</key> 5879 <key>Comment</key>
5384 <string>Number of times to iterate the glow (higher = wider and smoother but slower)</string> 5880 <string>Number of times to iterate the glow (higher = wider and smoother but slower)</string>
5385 <key>Persist</key> 5881 <key>Persist</key>
5386 <integer>1</integer> 5882 <integer>1</integer>
5387 <key>Type</key> 5883 <key>Type</key>
5388 <string>S32</string> 5884 <string>S32</string>
5389 <key>Value</key> 5885 <key>Value</key>
5390 <integer>2</integer> 5886 <integer>2</integer>
5391 </map> 5887 </map>
5392 <key>RenderGlowLumWeights</key> 5888 <key>RenderGlowLumWeights</key>
5393 <map> 5889 <map>
5394 <key>Comment</key> 5890 <key>Comment</key>
5395 <string>Weights for each color channel to be used in calculating luminance (should add up to 1.0)</string> 5891 <string>Weights for each color channel to be used in calculating luminance (should add up to 1.0)</string>
5396 <key>Persist</key> 5892 <key>Persist</key>
5397 <integer>1</integer> 5893 <integer>1</integer>
5398 <key>Type</key> 5894 <key>Type</key>
5399 <string>Vector3</string> 5895 <string>Vector3</string>
5400 <key>Value</key> 5896 <key>Value</key>
5401 <array> 5897 <array>
5402 <real>0.299</real> 5898 <real>0.299</real>
5403 <real>0.587</real> 5899 <real>0.587</real>
5404 <real>0.114</real> 5900 <real>0.114</real>
5405 </array> 5901 </array>
5406 </map> 5902 </map>
5407 <key>RenderGlowMaxExtractAlpha</key> 5903 <key>RenderGlowMaxExtractAlpha</key>
5408 <map> 5904 <map>
5409 <key>Comment</key> 5905 <key>Comment</key>
5410 <string>Max glow alpha value for brightness extraction to auto-glow.</string> 5906 <string>Max glow alpha value for brightness extraction to auto-glow.</string>
5411 <key>Persist</key> 5907 <key>Persist</key>
5412 <integer>1</integer> 5908 <integer>1</integer>
5413 <key>Type</key> 5909 <key>Type</key>
5414 <string>F32</string> 5910 <string>F32</string>
5415 <key>Value</key> 5911 <key>Value</key>
5416 <real>0.065</real> 5912 <real>0.065</real>
5417 </map> 5913 </map>
5418 <key>RenderGlowMinLuminance</key> 5914 <key>RenderGlowMinLuminance</key>
5419 <map> 5915 <map>
5420 <key>Comment</key> 5916 <key>Comment</key>
5421 <string>Min luminance intensity necessary to consider an object bright enough to automatically glow. (Gets clamped to 0 - 1.0 range)</string> 5917 <string>Min luminance intensity necessary to consider an object bright enough to automatically glow. (Gets clamped to 0 - 1.0 range)</string>
5422 <key>Persist</key> 5918 <key>Persist</key>
5423 <integer>1</integer> 5919 <integer>1</integer>
5424 <key>Type</key> 5920 <key>Type</key>
5425 <string>F32</string> 5921 <string>F32</string>
5426 <key>Value</key> 5922 <key>Value</key>
5427 <real>1.0</real> 5923 <real>1.0</real>
5428 </map> 5924 </map>
5429 <key>RenderGlowResolutionPow</key> 5925 <key>RenderGlowResolutionPow</key>
5430 <map> 5926 <map>
5431 <key>Comment</key> 5927 <key>Comment</key>
5432 <string>Glow map resolution power of two.</string> 5928 <string>Glow map resolution power of two.</string>
5433 <key>Persist</key> 5929 <key>Persist</key>
5434 <integer>1</integer> 5930 <integer>1</integer>
5435 <key>Type</key> 5931 <key>Type</key>
5436 <string>S32</string> 5932 <string>S32</string>
5437 <key>Value</key> 5933 <key>Value</key>
5438 <integer>9</integer> 5934 <integer>9</integer>
5439 </map> 5935 </map>
5440 <key>RenderGlowStrength</key> 5936 <key>RenderGlowStrength</key>
5441 <map> 5937 <map>
5442 <key>Comment</key> 5938 <key>Comment</key>
5443 <string>Additive strength of glow.</string> 5939 <string>Additive strength of glow.</string>
5444 <key>Persist</key> 5940 <key>Persist</key>
5445 <integer>1</integer> 5941 <integer>1</integer>
5446 <key>Type</key> 5942 <key>Type</key>
5447 <string>F32</string> 5943 <string>F32</string>
5448 <key>Value</key> 5944 <key>Value</key>
5449 <real>0.35</real> 5945 <real>0.35</real>
5450 </map> 5946 </map>
5451 <key>RenderGlowWarmthAmount</key> 5947 <key>RenderGlowWarmthAmount</key>
5452 <map> 5948 <map>
5453 <key>Comment</key> 5949 <key>Comment</key>
5454 <string>Amount of warmth extraction to use (versus luminance extraction). 0 = lum, 1.0 = warmth</string> 5950 <string>Amount of warmth extraction to use (versus luminance extraction). 0 = lum, 1.0 = warmth</string>
5455 <key>Persist</key> 5951 <key>Persist</key>
5456 <integer>1</integer> 5952 <integer>1</integer>
5457 <key>Type</key> 5953 <key>Type</key>
5458 <string>F32</string> 5954 <string>F32</string>
5459 <key>Value</key> 5955 <key>Value</key>
5460 <real>0</real> 5956 <real>0.0</real>
5461 </map> 5957 </map>
5462 <key>RenderGlowWarmthWeights</key> 5958 <key>RenderGlowWarmthWeights</key>
5463 <map> 5959 <map>
5464 <key>Comment</key> 5960 <key>Comment</key>
5465 <string>Weight of each color channel used before finding the max warmth</string> 5961 <string>Weight of each color channel used before finding the max warmth</string>
5466 <key>Persist</key> 5962 <key>Persist</key>
5467 <integer>1</integer> 5963 <integer>1</integer>
5468 <key>Type</key> 5964 <key>Type</key>
5469 <string>Vector3</string> 5965 <string>Vector3</string>
5470 <key>Value</key> 5966 <key>Value</key>
5471 <array> 5967 <array>
5472 <real>1.0</real> 5968 <real>1.0</real>
5473 <real>0.5</real> 5969 <real>0.5</real>
5474 <real>0.7</real> 5970 <real>0.7</real>
5475 </array> 5971 </array>
5476 </map> 5972 </map>
5477 <key>RenderGlowWidth</key> 5973 <key>RenderGlowWidth</key>
5478 <map> 5974 <map>
5479 <key>Comment</key> 5975 <key>Comment</key>
5480 <string>Glow sample size (higher = wider and softer but eventually more pixelated)</string> 5976 <string>Glow sample size (higher = wider and softer but eventually more pixelated)</string>
5481 <key>Persist</key> 5977 <key>Persist</key>
5482 <integer>1</integer> 5978 <integer>1</integer>
5483 <key>Type</key> 5979 <key>Type</key>
5484 <string>F32</string> 5980 <string>F32</string>
5485 <key>Value</key> 5981 <key>Value</key>
5486 <real>1.3</real> 5982 <real>1.3</real>
5487 </map> 5983 </map>
5488 <key>RenderHUDInSnapshot</key> 5984 <key>RenderHUDInSnapshot</key>
5489 <map> 5985 <map>
5490 <key>Comment</key> 5986 <key>Comment</key>
5491 <string>Display HUD attachments in snapshot</string> 5987 <string>Display HUD attachments in snapshot</string>
5492 <key>Persist</key> 5988 <key>Persist</key>
5493 <integer>1</integer> 5989 <integer>1</integer>
5494 <key>Type</key> 5990 <key>Type</key>
5495 <string>Boolean</string> 5991 <string>Boolean</string>
5496 <key>Value</key> 5992 <key>Value</key>
5497 <integer>0</integer> 5993 <integer>0</integer>
5498 </map> 5994 </map>
5499 <key>RenderHiddenSelections</key> 5995 <key>RenderHiddenSelections</key>
5500 <map> 5996 <map>
5501 <key>Comment</key> 5997 <key>Comment</key>
5502 <string>Show selection lines on objects that are behind other objects</string> 5998 <string>Show selection lines on objects that are behind other objects</string>
5503 <key>Persist</key> 5999 <key>Persist</key>
5504 <integer>1</integer> 6000 <integer>1</integer>
5505 <key>Type</key> 6001 <key>Type</key>
5506 <string>Boolean</string> 6002 <string>Boolean</string>
5507 <key>Value</key> 6003 <key>Value</key>
5508 <integer>1</integer> 6004 <integer>1</integer>
5509 </map> 6005 </map>
5510 <key>RenderHideGroupTitle</key> 6006 <key>RenderHideGroupTitle</key>
5511 <map> 6007 <map>
5512 <key>Comment</key> 6008 <key>Comment</key>
5513 <string>Don&apos;t show my group title in my name label</string> 6009 <string>Don't show my group title in my name label</string>
5514 <key>Persist</key> 6010 <key>Persist</key>
5515 <integer>1</integer> 6011 <integer>1</integer>
5516 <key>Type</key> 6012 <key>Type</key>
5517 <string>Boolean</string> 6013 <string>Boolean</string>
5518 <key>Value</key> 6014 <key>Value</key>
5519 <integer>0</integer> 6015 <integer>0</integer>
5520 </map> 6016 </map>
5521 <key>RenderHideGroupTitleAll</key> 6017 <key>RenderHideGroupTitleAll</key>
5522 <map> 6018 <map>
5523 <key>Comment</key> 6019 <key>Comment</key>
5524 <string>Show group titles in name labels</string> 6020 <string>Show group titles in name labels</string>
5525 <key>Persist</key> 6021 <key>Persist</key>
5526 <integer>1</integer> 6022 <integer>1</integer>
5527 <key>Type</key> 6023 <key>Type</key>
5528 <string>Boolean</string> 6024 <string>Boolean</string>
5529 <key>Value</key> 6025 <key>Value</key>
5530 <integer>0</integer> 6026 <integer>0</integer>
5531 </map> 6027 </map>
5532 <key>RenderInitError</key> 6028 <key>RenderInitError</key>
5533 <map> 6029 <map>
5534 <key>Comment</key> 6030 <key>Comment</key>
5535 <string>Error occured while initializing GL</string> 6031 <string>Error occured while initializing GL</string>
5536 <key>Persist</key> 6032 <key>Persist</key>
5537 <integer>1</integer> 6033 <integer>1</integer>
5538 <key>Type</key> 6034 <key>Type</key>
5539 <string>Boolean</string> 6035 <string>Boolean</string>
5540 <key>Value</key> 6036 <key>Value</key>
5541 <integer>0</integer> 6037 <integer>0</integer>
5542 </map> 6038 </map>
5543 <key>RenderLightRadius</key> 6039 <key>RenderLightRadius</key>
5544 <map> 6040 <map>
5545 <key>Comment</key> 6041 <key>Comment</key>
5546 <string>Render the radius of selected lights</string> 6042 <string>Render the radius of selected lights</string>
5547 <key>Persist</key> 6043 <key>Persist</key>
5548 <integer>1</integer> 6044 <integer>1</integer>
5549 <key>Type</key> 6045 <key>Type</key>
5550 <string>Boolean</string> 6046 <string>Boolean</string>
5551 <key>Value</key> 6047 <key>Value</key>
5552 <integer>0</integer> 6048 <integer>0</integer>
5553 </map> 6049 </map>
5554 <key>RenderLightingDetail</key> 6050 <key>RenderLightingDetail</key>
5555 <map> 6051 <map>
5556 <key>Comment</key> 6052 <key>Comment</key>
5557 <string>Amount of detail for lighting objects/avatars/terrain (0=sun/moon only, 1=enable local lights)</string> 6053 <string>Amount of detail for lighting objects/avatars/terrain (0=sun/moon only, 1=enable local lights)</string>
5558 <key>Persist</key> 6054 <key>Persist</key>
5559 <integer>1</integer> 6055 <integer>1</integer>
5560 <key>Type</key> 6056 <key>Type</key>
5561 <string>S32</string> 6057 <string>S32</string>
5562 <key>Value</key> 6058 <key>Value</key>
5563 <integer>1</integer> 6059 <integer>1</integer>
5564 </map> 6060 </map>
5565 <key>RenderMaxPartCount</key> 6061 <key>RenderMaxPartCount</key>
5566 <map> 6062 <map>
5567 <key>Comment</key> 6063 <key>Comment</key>
5568 <string>Maximum number of particles to display on screen</string> 6064 <string>Maximum number of particles to display on screen</string>
5569 <key>Persist</key> 6065 <key>Persist</key>
5570 <integer>1</integer> 6066 <integer>1</integer>
5571 <key>Type</key> 6067 <key>Type</key>
5572 <string>S32</string> 6068 <string>S32</string>
5573 <key>Value</key> 6069 <key>Value</key>
5574 <integer>4096</integer> 6070 <integer>4096</integer>
5575 </map> 6071 </map>
5576 <key>RenderMaxVBOSize</key> 6072 <key>RenderMaxVBOSize</key>
5577 <map> 6073 <map>
5578 <key>Comment</key> 6074 <key>Comment</key>
5579 <string>Maximum size of a vertex buffer (in KB).</string> 6075 <string>Maximum size of a vertex buffer (in KB).</string>
5580 <key>Persist</key> 6076 <key>Persist</key>
5581 <integer>1</integer> 6077 <integer>1</integer>
5582 <key>Type</key> 6078 <key>Type</key>
5583 <string>S32</string> 6079 <string>S32</string>
5584 <key>Value</key> 6080 <key>Value</key>
5585 <integer>32</integer> 6081 <integer>32</integer>
5586 </map> 6082 </map>
5587 <key>RenderName</key> 6083 <key>RenderName</key>
5588 <map> 6084 <map>
5589 <key>Comment</key> 6085 <key>Comment</key>
5590 <string>Controls display of names above avatars (0 = never, 1 = fade, 2 = always)</string> 6086 <string>Controls display of names above avatars (0 = never, 1 = fade, 2 = always)</string>
5591 <key>Persist</key> 6087 <key>Persist</key>
5592 <integer>1</integer> 6088 <integer>1</integer>
5593 <key>Type</key> 6089 <key>Type</key>
5594 <string>S32</string> 6090 <string>S32</string>
5595 <key>Value</key> 6091 <key>Value</key>
5596 <integer>2</integer> 6092 <integer>2</integer>
5597 </map> 6093 </map>
5598 <key>RenderNameFadeDuration</key> 6094 <key>RenderNameFadeDuration</key>
5599 <map> 6095 <map>
5600 <key>Comment</key> 6096 <key>Comment</key>
5601 <string>Time interval over which to fade avatar names (seconds)</string> 6097 <string>Time interval over which to fade avatar names (seconds)</string>
5602 <key>Persist</key> 6098 <key>Persist</key>
5603 <integer>1</integer> 6099 <integer>1</integer>
5604 <key>Type</key> 6100 <key>Type</key>
5605 <string>F32</string> 6101 <string>F32</string>
5606 <key>Value</key> 6102 <key>Value</key>
5607 <real>1</real> 6103 <real>1.0</real>
5608 </map> 6104 </map>
5609 <key>RenderNameHideSelf</key> 6105 <key>RenderNameHideSelf</key>
5610 <map> 6106 <map>
5611 <key>Comment</key> 6107 <key>Comment</key>
5612 <string>Don&apos;t display own name above avatar</string> 6108 <string>Don't display own name above avatar</string>
5613 <key>Persist</key> 6109 <key>Persist</key>
5614 <integer>1</integer> 6110 <integer>1</integer>
5615 <key>Type</key> 6111 <key>Type</key>
5616 <string>Boolean</string> 6112 <string>Boolean</string>
5617 <key>Value</key> 6113 <key>Value</key>
5618 <integer>0</integer> 6114 <integer>0</integer>
5619 </map> 6115 </map>
5620 <key>RenderNameShowTime</key> 6116 <key>RenderNameShowTime</key>
5621 <map> 6117 <map>
5622 <key>Comment</key> 6118 <key>Comment</key>
5623 <string>Fade avatar names after specified time (seconds)</string> 6119 <string>Fade avatar names after specified time (seconds)</string>
5624 <key>Persist</key> 6120 <key>Persist</key>
5625 <integer>1</integer> 6121 <integer>1</integer>
5626 <key>Type</key> 6122 <key>Type</key>
5627 <string>F32</string> 6123 <string>F32</string>
5628 <key>Value</key> 6124 <key>Value</key>
5629 <real>10</real> 6125 <real>10.0</real>
5630 </map> 6126 </map>
5631 <key>RenderObjectBump</key> 6127 <key>RenderObjectBump</key>
5632 <map> 6128 <map>
5633 <key>Comment</key> 6129 <key>Comment</key>
5634 <string>Show bumpmapping on primitives</string> 6130 <string>Show bumpmapping on primitives</string>
5635 <key>Persist</key> 6131 <key>Persist</key>
5636 <integer>1</integer> 6132 <integer>1</integer>
5637 <key>Type</key> 6133 <key>Type</key>
5638 <string>Boolean</string> 6134 <string>Boolean</string>
5639 <key>Value</key> 6135 <key>Value</key>
5640 <integer>1</integer> 6136 <integer>1</integer>
5641 </map> 6137 </map>
5642 <key>RenderQualityPerformance</key> 6138 <key>RenderQualityPerformance</key>
5643 <map> 6139 <map>
5644 <key>Comment</key> 6140 <key>Comment</key>
5645 <string>Which graphics settings you've chosen</string> 6141 <string>Which graphics settings you've chosen</string>
5646 <key>Persist</key> 6142 <key>Persist</key>
5647 <integer>1</integer> 6143 <integer>1</integer>
5648 <key>Type</key> 6144 <key>Type</key>
5649 <string>U32</string> 6145 <string>U32</string>
5650 <key>Value</key> 6146 <key>Value</key>
5651 <integer>1</integer> 6147 <integer>1</integer>
5652 </map> 6148 </map>
5653 <key>RenderReflectionDetail</key> 6149 <key>RenderReflectionDetail</key>
5654 <map> 6150 <map>
5655 <key>Comment</key> 6151 <key>Comment</key>
5656 <string>Detail of reflection render pass.</string> 6152 <string>Detail of reflection render pass.</string>
5657 <key>Persist</key> 6153 <key>Persist</key>
5658 <integer>1</integer> 6154 <integer>1</integer>
5659 <key>Type</key> 6155 <key>Type</key>
5660 <string>S32</string> 6156 <string>S32</string>
5661 <key>Value</key> 6157 <key>Value</key>
5662 <integer>2</integer> 6158 <integer>2</integer>
5663 </map> 6159 </map>
5664 <key>RenderReflectionRes</key> 6160 <key>RenderReflectionRes</key>
5665 <map> 6161 <map>
5666 <key>Comment</key> 6162 <key>Comment</key>
5667 <string>Reflection map resolution.</string> 6163 <string>Reflection map resolution.</string>
5668 <key>Persist</key> 6164 <key>Persist</key>
5669 <integer>1</integer> 6165 <integer>1</integer>
5670 <key>Type</key> 6166 <key>Type</key>
5671 <string>S32</string> 6167 <string>S32</string>
5672 <key>Value</key> 6168 <key>Value</key>
5673 <integer>64</integer> 6169 <integer>64</integer>
5674 </map> 6170 </map>
5675 <key>RenderResolutionDivisor</key> 6171 <key>RenderResolutionDivisor</key>
5676 <map> 6172 <map>
5677 <key>Comment</key> 6173 <key>Comment</key>
5678 <string>Divisor for rendering 3D scene at reduced resolution.</string> 6174 <string>Divisor for rendering 3D scene at reduced resolution.</string>
5679 <key>Persist</key> 6175 <key>Persist</key>
5680 <integer>1</integer> 6176 <integer>1</integer>
5681 <key>Type</key> 6177 <key>Type</key>
5682 <string>U32</string> 6178 <string>U32</string>
5683 <key>Value</key> 6179 <key>Value</key>
5684 <integer>1</integer> 6180 <integer>1</integer>
5685 </map> 6181 </map>
5686 <key>RenderShaderLODThreshold</key> 6182 <key>RenderShaderLODThreshold</key>
5687 <map> 6183 <map>
5688 <key>Comment</key> 6184 <key>Comment</key>
5689 <string>Fraction of draw distance defining the switch to a different shader LOD</string> 6185 <string>Fraction of draw distance defining the switch to a different shader LOD</string>
5690 <key>Persist</key> 6186 <key>Persist</key>
5691 <integer>1</integer> 6187 <integer>1</integer>
5692 <key>Type</key> 6188 <key>Type</key>
5693 <string>F32</string> 6189 <string>F32</string>
5694 <key>Value</key> 6190 <key>Value</key>
5695 <integer>1.0</integer> 6191 <real>1.0</real>
5696 </map> 6192 </map>
6193 <key>RenderShaderParticleThreshold</key>
6194 <map>
6195 <key>Comment</key>
6196 <string>Fraction of draw distance to not use shader on particles</string>
6197 <key>Persist</key>
6198 <integer>1</integer>
6199 <key>Type</key>
6200 <string>F32</string>
6201 <key>Value</key>
6202 <real>0.25</real>
6203 </map>
5697 <key>RenderSunDynamicRange</key> 6204 <key>RenderSunDynamicRange</key>
5698 <map> 6205 <map>
5699 <key>Comment</key> 6206 <key>Comment</key>
5700 <string>Defines what percent brighter the sun is than local point lights (1.0 = 100% brighter. Value should not be less than 0. ).</string> 6207 <string>Defines what percent brighter the sun is than local point lights (1.0 = 100% brighter. Value should not be less than 0. ).</string>
5701 <key>Persist</key> 6208 <key>Persist</key>
5702 <integer>1</integer> 6209 <integer>1</integer>
5703 <key>Type</key> 6210 <key>Type</key>
5704 <string>F32</string> 6211 <string>F32</string>
5705 <key>Value</key> 6212 <key>Value</key>
5706 <integer>1.0</integer> 6213 <real>1.0</real>
5707 </map> 6214 </map>
5708 <key>RenderTerrainDetail</key> 6215 <key>RenderTerrainDetail</key>
5709 <map> 6216 <map>
5710 <key>Comment</key> 6217 <key>Comment</key>
5711 <string>Detail applied to terrain texturing (0 = none, 1 or 2 = full)</string> 6218 <string>Detail applied to terrain texturing (0 = none, 1 or 2 = full)</string>
5712 <key>Persist</key> 6219 <key>Persist</key>
5713 <integer>1</integer> 6220 <integer>1</integer>
5714 <key>Type</key> 6221 <key>Type</key>
5715 <string>S32</string> 6222 <string>S32</string>
5716 <key>Value</key> 6223 <key>Value</key>
5717 <integer>2</integer> 6224 <integer>2</integer>
5718 </map> 6225 </map>
5719 <key>RenderTerrainLODFactor</key> 6226 <key>RenderTerrainLODFactor</key>
5720 <map> 6227 <map>
5721 <key>Comment</key> 6228 <key>Comment</key>
5722 <string>Controls level of detail of terrain (multiplier for current screen area when calculated level of detail)</string> 6229 <string>Controls level of detail of terrain (multiplier for current screen area when calculated level of detail)</string>
5723 <key>Persist</key> 6230 <key>Persist</key>
5724 <integer>1</integer> 6231 <integer>1</integer>
5725 <key>Type</key> 6232 <key>Type</key>
5726 <string>F32</string> 6233 <string>F32</string>
5727 <key>Value</key> 6234 <key>Value</key>
5728 <real>1.0</real> 6235 <real>1.0</real>
5729 </map> 6236 </map>
5730 <key>RenderTerrainScale</key> 6237 <key>RenderTerrainScale</key>
5731 <map> 6238 <map>
5732 <key>Comment</key> 6239 <key>Comment</key>
5733 <string>Terrain detail texture scale</string> 6240 <string>Terrain detail texture scale</string>
5734 <key>Persist</key> 6241 <key>Persist</key>
5735 <integer>1</integer> 6242 <integer>1</integer>
5736 <key>Type</key> 6243 <key>Type</key>
5737 <string>F32</string> 6244 <string>F32</string>
5738 <key>Value</key> 6245 <key>Value</key>
5739 <real>12</real> 6246 <real>12.0</real>
5740 </map> 6247 </map>
6248 <key>RenderTextureMemoryMultiple</key>
6249 <map>
6250 <key>Comment</key>
6251 <string>Multiple of texture memory value to use (should fit: 0 &lt; value &lt;= 1.0)</string>
6252 <key>Persist</key>
6253 <integer>1</integer>
6254 <key>Type</key>
6255 <string>F32</string>
6256 <key>Value</key>
6257 <real>1.0</real>
6258 </map>
5741 <key>RenderTreeLODFactor</key> 6259 <key>RenderTreeLODFactor</key>
5742 <map> 6260 <map>
5743 <key>Comment</key> 6261 <key>Comment</key>
5744 <string>Controls level of detail of vegetation (multiplier for current screen area when calculated level of detail)</string> 6262 <string>Controls level of detail of vegetation (multiplier for current screen area when calculated level of detail)</string>
5745 <key>Persist</key> 6263 <key>Persist</key>
5746 <integer>1</integer> 6264 <integer>1</integer>
5747 <key>Type</key> 6265 <key>Type</key>
5748 <string>F32</string> 6266 <string>F32</string>
5749 <key>Value</key> 6267 <key>Value</key>
5750 <real>0.5</real> 6268 <real>0.5</real>
5751 </map> 6269 </map>
5752 <key>RenderUIInSnapshot</key> 6270 <key>RenderUIInSnapshot</key>
5753 <map> 6271 <map>
5754 <key>Comment</key> 6272 <key>Comment</key>
5755 <string>Display user interface in snapshot</string> 6273 <string>Display user interface in snapshot</string>
5756 <key>Persist</key> 6274 <key>Persist</key>
5757 <integer>1</integer> 6275 <integer>1</integer>
5758 <key>Type</key> 6276 <key>Type</key>
5759 <string>Boolean</string> 6277 <string>Boolean</string>
5760 <key>Value</key> 6278 <key>Value</key>
5761 <integer>0</integer> 6279 <integer>0</integer>
5762 </map> 6280 </map>
5763 <key>RenderUseCleverUI</key> 6281 <key>RenderUnloadedAvatar</key>
5764 <map> 6282 <map>
5765 <key>Comment</key> 6283 <key>Comment</key>
5766 <string>Turns on the \"clever\" UI rendering optimization. It's a known performace gain on apple.</string> 6284 <string>Show avatars which haven't finished loading</string>
5767 <key>Persist</key> 6285 <key>Persist</key>
5768 <integer>1</integer> 6286 <integer>1</integer>
5769 <key>Type</key> 6287 <key>Type</key>
5770 <string>Boolean</string> 6288 <string>Boolean</string>
5771 <key>Value</key> 6289 <key>Value</key>
5772 <integer>1</integer> 6290 <integer>0</integer>
5773 </map> 6291 </map>
5774 <key>RenderUseFarClip</key>
5775 <map>
5776 <key>Comment</key>
5777 <string>If false, frustum culling will ignore far clip plane.</string>
5778 <key>Persist</key>
5779 <integer>1</integer>
5780 <key>Type</key>
5781 <string>Boolean</string>
5782 <key>Value</key>
5783 <integer>1</integer>
5784 </map>
5785 <key>RenderUseFBO</key> 6292 <key>RenderUseFBO</key>
5786 <map> 6293 <map>
5787 <key>Comment</key> 6294 <key>Comment</key>
5788 <string>Whether we want to use GL_EXT_framebuffer_objects.</string> 6295 <string>Whether we want to use GL_EXT_framebuffer_objects.</string>
5789 <key>Persist</key> 6296 <key>Persist</key>
5790 <integer>1</integer> 6297 <integer>1</integer>
5791 <key>Type</key> 6298 <key>Type</key>
5792 <string>Boolean</string> 6299 <string>Boolean</string>
5793 <key>Value</key> 6300 <key>Value</key>
5794 <integer>0</integer> 6301 <integer>0</integer>
5795 </map> 6302 </map>
6303 <key>RenderUseFarClip</key>
6304 <map>
6305 <key>Comment</key>
6306 <string>If false, frustum culling will ignore far clip plane.</string>
6307 <key>Persist</key>
6308 <integer>1</integer>
6309 <key>Type</key>
6310 <string>Boolean</string>
6311 <key>Value</key>
6312 <integer>1</integer>
6313 </map>
5796 <key>RenderUseImpostors</key> 6314 <key>RenderUseImpostors</key>
5797 <map> 6315 <map>
5798 <key>Comment</key> 6316 <key>Comment</key>
5799 <string>Whether we want to use impostors for far away avatars.</string> 6317 <string>Whether we want to use impostors for far away avatars.</string>
5800 <key>Persist</key> 6318 <key>Persist</key>
5801 <integer>1</integer> 6319 <integer>1</integer>
5802 <key>Type</key> 6320 <key>Type</key>
5803 <string>Boolean</string> 6321 <string>Boolean</string>
5804 <key>Value</key> 6322 <key>Value</key>
5805 <integer>1</integer> 6323 <integer>1</integer>
5806 </map> 6324 </map>
5807 <key>RenderUseShaderLOD</key> 6325 <key>RenderUseShaderLOD</key>
5808 <map> 6326 <map>
5809 <key>Comment</key> 6327 <key>Comment</key>
5810 <string>Whether we want to have different shaders for LOD</string> 6328 <string>Whether we want to have different shaders for LOD</string>
5811 <key>Persist</key> 6329 <key>Persist</key>
5812 <integer>1</integer> 6330 <integer>1</integer>
5813 <key>Type</key> 6331 <key>Type</key>
5814 <string>Boolean</string> 6332 <string>Boolean</string>
5815 <key>Value</key> 6333 <key>Value</key>
5816 <integer>1</integer> 6334 <integer>1</integer>
5817 </map> 6335 </map>
5818 <key>RenderUseShaderNearParticles</key> 6336 <key>RenderUseShaderNearParticles</key>
5819 <map> 6337 <map>
5820 <key>Comment</key> 6338 <key>Comment</key>
5821 <string>Whether we want to use shaders on near particles</string> 6339 <string>Whether we want to use shaders on near particles</string>
5822 <key>Persist</key> 6340 <key>Persist</key>
5823 <integer>1</integer> 6341 <integer>1</integer>
5824 <key>Type</key> 6342 <key>Type</key>
5825 <string>Boolean</string> 6343 <string>Boolean</string>
5826 <key>Value</key> 6344 <key>Value</key>
5827 <integer>0</integer> 6345 <integer>0</integer>
5828 </map> 6346 </map>
5829 <key>RenderShaderParticleThreshold</key>
5830 <map>
5831 <key>Comment</key>
5832 <string>Fraction of draw distance to not use shader on particles</string>
5833 <key>Persist</key>
5834 <integer>1</integer>
5835 <key>Type</key>
5836 <string>F32</string>
5837 <key>Value</key>
5838 <real>0.25</real>
5839 </map>
5840 <key>RenderVBOEnable</key> 6347 <key>RenderVBOEnable</key>
5841 <map> 6348 <map>
5842 <key>Comment</key> 6349 <key>Comment</key>
5843 <string>Use GL Vertex Buffer Objects</string> 6350 <string>Use GL Vertex Buffer Objects</string>
5844 <key>Persist</key> 6351 <key>Persist</key>
5845 <integer>1</integer> 6352 <integer>1</integer>
5846 <key>Type</key> 6353 <key>Type</key>
5847 <string>Boolean</string> 6354 <string>Boolean</string>
5848 <key>Value</key> 6355 <key>Value</key>
5849 <integer>1</integer> 6356 <integer>1</integer>
5850 </map> 6357 </map>
5851 <key>RenderVolumeLODFactor</key> 6358 <key>RenderVolumeLODFactor</key>
5852 <map> 6359 <map>
5853 <key>Comment</key> 6360 <key>Comment</key>
5854 <string>Controls level of detail of primitives (multiplier for current screen area when calculated level of detail)</string> 6361 <string>Controls level of detail of primitives (multiplier for current screen area when calculated level of detail)</string>
5855 <key>Persist</key> 6362 <key>Persist</key>
5856 <integer>1</integer> 6363 <integer>1</integer>
5857 <key>Type</key> 6364 <key>Type</key>
5858 <string>F32</string> 6365 <string>F32</string>
5859 <key>Value</key> 6366 <key>Value</key>
5860 <real>1</real> 6367 <real>1.0</real>
5861 </map> 6368 </map>
5862 <key>RenderWater</key> 6369 <key>RenderWater</key>
5863 <map> 6370 <map>
5864 <key>Comment</key> 6371 <key>Comment</key>
5865 <string>Display water</string> 6372 <string>Display water</string>
5866 <key>Persist</key> 6373 <key>Persist</key>
5867 <integer>1</integer> 6374 <integer>1</integer>
5868 <key>Type</key> 6375 <key>Type</key>
5869 <string>Boolean</string> 6376 <string>Boolean</string>
5870 <key>Value</key> 6377 <key>Value</key>
5871 <integer>1</integer> 6378 <integer>1</integer>
5872 </map> 6379 </map>
5873 <key>RenderWaterMipNormal</key> 6380 <key>RenderWaterMipNormal</key>
5874 <map> 6381 <map>
5875 <key>Comment</key> 6382 <key>Comment</key>
5876 <string>Use mip maps for water normal map.</string> 6383 <string>Use mip maps for water normal map.</string>
5877 <key>Persist</key> 6384 <key>Persist</key>
5878 <integer>1</integer> 6385 <integer>1</integer>
5879 <key>Type</key> 6386 <key>Type</key>
5880 <string>Boolean</string> 6387 <string>Boolean</string>
5881 <key>Value</key> 6388 <key>Value</key>
5882 <integer>1</integer> 6389 <integer>1</integer>
5883 </map> 6390 </map>
5884 <key>RenderWaterReflections</key>
5885 <map>
5886 <key>Comment</key>
5887 <string>Reflect the environment in the water.</string>
5888 <key>Persist</key>
5889 <integer>1</integer>
5890 <key>Type</key>
5891 <string>Boolean</string>
5892 <key>Value</key>
5893 <integer>0</integer>
5894 </map>
5895 <key>RenderWaterRefResolution</key> 6391 <key>RenderWaterRefResolution</key>
5896 <map> 6392 <map>
5897 <key>Comment</key> 6393 <key>Comment</key>
5898 <string>Water planar reflection resolution.</string> 6394 <string>Water planar reflection resolution.</string>
5899 <key>Persist</key> 6395 <key>Persist</key>
5900 <integer>1</integer> 6396 <integer>1</integer>
5901 <key>Type</key> 6397 <key>Type</key>
5902 <string>S32</string> 6398 <string>S32</string>
5903 <key>Value</key> 6399 <key>Value</key>
5904 <integer>512</integer> 6400 <integer>512</integer>
5905 </map> 6401 </map>
6402 <key>RenderWaterReflections</key>
6403 <map>
6404 <key>Comment</key>
6405 <string>Reflect the environment in the water.</string>
6406 <key>Persist</key>
6407 <integer>1</integer>
6408 <key>Type</key>
6409 <string>Boolean</string>
6410 <key>Value</key>
6411 <integer>0</integer>
6412 </map>
5906 <key>RotateRight</key> 6413 <key>RotateRight</key>
5907 <map> 6414 <map>
5908 <key>Comment</key> 6415 <key>Comment</key>
5909 <string>Make the agent rotate to its right.</string> 6416 <string>Make the agent rotate to its right.</string>
5910 <key>Persist</key> 6417 <key>Persist</key>
5911 <integer>1</integer> 6418 <integer>1</integer>
5912 <key>Type</key> 6419 <key>Type</key>
5913 <string>Boolean</string> 6420 <string>Boolean</string>
5914 <key>Value</key> 6421 <key>Value</key>
5915 <integer>0</integer> 6422 <integer>0</integer>
5916 </map> 6423 </map>
5917 <key>RotationStep</key> 6424 <key>RotationStep</key>
5918 <map> 6425 <map>
5919 <key>Comment</key> 6426 <key>Comment</key>
5920 <string>All rotations via rotation tool are constrained to multiples of this unit (degrees)</string> 6427 <string>All rotations via rotation tool are constrained to multiples of this unit (degrees)</string>
5921 <key>Persist</key> 6428 <key>Persist</key>
5922 <integer>1</integer> 6429 <integer>1</integer>
5923 <key>Type</key> 6430 <key>Type</key>
5924 <string>F32</string> 6431 <string>F32</string>
5925 <key>Value</key> 6432 <key>Value</key>
5926 <real>1</real> 6433 <real>1.0</real>
5927 </map> 6434 </map>
5928 <key>RunBtnState</key> 6435 <key>RunBtnState</key>
5929 <map> 6436 <map>
5930 <key>Comment</key> 6437 <key>Comment</key>
5931 <string /> 6438 <string />
5932 <key>Persist</key> 6439 <key>Persist</key>
5933 <integer>0</integer> 6440 <integer>0</integer>
5934 <key>Type</key> 6441 <key>Type</key>
5935 <string>Boolean</string> 6442 <string>Boolean</string>
5936 <key>Value</key> 6443 <key>Value</key>
5937 <integer>0</integer> 6444 <integer>0</integer>
5938 </map> 6445 </map>
5939 <key>RunMultipleThreads</key> 6446 <key>RunMultipleThreads</key>
5940 <map> 6447 <map>
5941 <key>Comment</key> 6448 <key>Comment</key>
5942 <string>If TRUE keep background threads active during render</string> 6449 <string>If TRUE keep background threads active during render</string>
5943 <key>Persist</key> 6450 <key>Persist</key>
5944 <integer>1</integer> 6451 <integer>1</integer>
5945 <key>Type</key> 6452 <key>Type</key>
5946 <string>Boolean</string> 6453 <string>Boolean</string>
5947 <key>Value</key> 6454 <key>Value</key>
5948 <integer>0</integer> 6455 <integer>0</integer>
5949 </map> 6456 </map>
5950 <key>SafeMode</key> 6457 <key>SafeMode</key>
5951 <map> 6458 <map>
5952 <key>Comment</key> 6459 <key>Comment</key>
5953 <string>Reset preferences, run in safe mode.</string> 6460 <string>Reset preferences, run in safe mode.</string>
5954 <key>Persist</key> 6461 <key>Persist</key>
5955 <integer>1</integer> 6462 <integer>1</integer>
5956 <key>Type</key> 6463 <key>Type</key>
5957 <string>Boolean</string> 6464 <string>Boolean</string>
5958 <key>Value</key> 6465 <key>Value</key>
5959 <integer>0</integer> 6466 <integer>0</integer>
5960 </map> 6467 </map>
5961 <key>SaveMinidump</key> 6468 <key>SaveMinidump</key>
5962 <map> 6469 <map>
5963 <key>Comment</key> 6470 <key>Comment</key>
5964 <string>Save minidump for developer debugging on crash</string> 6471 <string>Save minidump for developer debugging on crash</string>
5965 <key>Persist</key> 6472 <key>Persist</key>
5966 <integer>1</integer> 6473 <integer>1</integer>
5967 <key>Type</key> 6474 <key>Type</key>
5968 <string>Boolean</string> 6475 <string>Boolean</string>
5969 <key>Value</key> 6476 <key>Value</key>
5970 <integer>1</integer> 6477 <integer>1</integer>
5971 </map> 6478 </map>
5972 <key>ScaleShowAxes</key> 6479 <key>ScaleShowAxes</key>
5973 <map> 6480 <map>
5974 <key>Comment</key> 6481 <key>Comment</key>
5975 <string>Show indicator of selected scale axis when scaling</string> 6482 <string>Show indicator of selected scale axis when scaling</string>
5976 <key>Persist</key> 6483 <key>Persist</key>
5977 <integer>1</integer> 6484 <integer>1</integer>
5978 <key>Type</key> 6485 <key>Type</key>
5979 <string>Boolean</string> 6486 <string>Boolean</string>
5980 <key>Value</key> 6487 <key>Value</key>
5981 <integer>0</integer> 6488 <integer>0</integer>
5982 </map> 6489 </map>
5983 <key>ScaleStretchTextures</key> 6490 <key>ScaleStretchTextures</key>
5984 <map> 6491 <map>
5985 <key>Comment</key> 6492 <key>Comment</key>
5986 <string>Stretch textures along with object when scaling</string> 6493 <string>Stretch textures along with object when scaling</string>
5987 <key>Persist</key> 6494 <key>Persist</key>
5988 <integer>1</integer> 6495 <integer>1</integer>
5989 <key>Type</key> 6496 <key>Type</key>
5990 <string>Boolean</string> 6497 <string>Boolean</string>
5991 <key>Value</key> 6498 <key>Value</key>
5992 <integer>1</integer> 6499 <integer>1</integer>
5993 </map> 6500 </map>
5994 <key>ScaleUniform</key> 6501 <key>ScaleUniform</key>
5995 <map> 6502 <map>
5996 <key>Comment</key> 6503 <key>Comment</key>
5997 <string>Scale selected objects evenly about center of selection</string> 6504 <string>Scale selected objects evenly about center of selection</string>
5998 <key>Persist</key> 6505 <key>Persist</key>
5999 <integer>1</integer> 6506 <integer>1</integer>
6000 <key>Type</key> 6507 <key>Type</key>
6001 <string>Boolean</string> 6508 <string>Boolean</string>
6002 <key>Value</key> 6509 <key>Value</key>
6003 <integer>0</integer> 6510 <integer>0</integer>
6004 </map> 6511 </map>
6005 <key>ScriptErrorColor</key> 6512 <key>ScriptErrorColor</key>
6006 <map> 6513 <map>
6007 <key>Comment</key> 6514 <key>Comment</key>
6008 <string>Color of script error messages</string> 6515 <string>Color of script error messages</string>
6009 <key>Persist</key> 6516 <key>Persist</key>
6010 <integer>1</integer> 6517 <integer>1</integer>
6011 <key>Type</key> 6518 <key>Type</key>
6012 <string>Color4</string> 6519 <string>Color4</string>
6013 <key>Value</key> 6520 <key>Value</key>
6014 <array> 6521 <array>
6015 <real>0.8235294117</real> 6522 <real>0.8235294117</real>
6016 <real>0.2745098039</real> 6523 <real>0.2745098039</real>
6017 <real>0.2745098039</real> 6524 <real>0.2745098039</real>
6018 <real>1</real> 6525 <real>1.0</real>
6019 </array> 6526 </array>
6020 </map> 6527 </map>
6021 <key>ScriptErrorsAsChat</key> 6528 <key>ScriptErrorsAsChat</key>
6022 <map> 6529 <map>
6023 <key>Comment</key> 6530 <key>Comment</key>
6024 <string>Display script errors and warning in chat history</string> 6531 <string>Display script errors and warning in chat history</string>
6025 <key>Persist</key> 6532 <key>Persist</key>
6026 <integer>1</integer> 6533 <integer>1</integer>
6027 <key>Type</key> 6534 <key>Type</key>
6028 <string>Boolean</string> 6535 <string>Boolean</string>
6029 <key>Value</key> 6536 <key>Value</key>
6030 <integer>0</integer> 6537 <integer>0</integer>
6031 </map> 6538 </map>
6032 <key>ScriptHelpFollowsCursor</key> 6539 <key>ScriptHelpFollowsCursor</key>
6033 <map> 6540 <map>
6034 <key>Comment</key> 6541 <key>Comment</key>
6035 <string>Scripting help window updates contents based on script editor contents under text cursor</string> 6542 <string>Scripting help window updates contents based on script editor contents under text cursor</string>
6036 <key>Persist</key> 6543 <key>Persist</key>
6037 <integer>1</integer> 6544 <integer>1</integer>
6038 <key>Type</key> 6545 <key>Type</key>
6039 <string>Boolean</string> 6546 <string>Boolean</string>
6040 <key>Value</key> 6547 <key>Value</key>
6041 <integer>0</integer> 6548 <integer>0</integer>
6042 </map> 6549 </map>
6043 <key>SearchURLDefault</key> 6550 <key>SearchURLDefault</key>
6044 <map> 6551 <map>
6045 <key>Comment</key> 6552 <key>Comment</key>
6046 <string>URL to load for empty searches</string> 6553 <string>URL to load for empty searches</string>
6047 <key>Persist</key> 6554 <key>Persist</key>
6048 <integer>1</integer> 6555 <integer>1</integer>
6049 <key>Type</key> 6556 <key>Type</key>
6050 <string>String</string> 6557 <string>String</string>
6051 <key>Value</key> 6558 <key>Value</key>
6052 <string>http://secondlife.com/app/search/index.php?</string> 6559 <string>http://secondlife.com/app/search/index.php?</string>
6053 </map> 6560 </map>
6054 <key>SearchURLQuery</key> 6561 <key>SearchURLQuery</key>
6055 <map> 6562 <map>
6056 <key>Comment</key> 6563 <key>Comment</key>
6057 <string>URL to use for searches</string> 6564 <string>URL to use for searches</string>
6058 <key>Persist</key> 6565 <key>Persist</key>
6059 <integer>1</integer> 6566 <integer>1</integer>
6060 <key>Type</key> 6567 <key>Type</key>
6061 <string>String</string> 6568 <string>String</string>
6062 <key>Value</key> 6569 <key>Value</key>
6063 <string>http://secondlife.com/app/search/search_proxy.php?q=[QUERY]&amp;s=[COLLECTION]&amp;</string> 6570 <string>http://secondlife.com/app/search/search_proxy.php?q=[QUERY]&amp;s=[COLLECTION]&amp;</string>
6064 </map> 6571 </map>
6065 <key>SearchURLSuffix2</key> 6572 <key>SearchURLSuffix2</key>
6066 <map> 6573 <map>
6067 <key>Comment</key> 6574 <key>Comment</key>
6068 <string>Parameters added to end of search queries</string> 6575 <string>Parameters added to end of search queries</string>
6069 <key>Persist</key> 6576 <key>Persist</key>
6070 <integer>1</integer> 6577 <integer>1</integer>
6071 <key>Type</key> 6578 <key>Type</key>
6072 <string>String</string> 6579 <string>String</string>
6073 <key>Value</key> 6580 <key>Value</key>
6074 <string>lang=[LANG]&amp;m=[MATURE]&amp;t=[TEEN]&amp;region=[REGION]&amp;x=[X]&amp;y=[Y]&amp;z=[Z]&amp;session=[SESSION]</string> 6581 <string>lang=[LANG]&amp;m=[MATURE]&amp;t=[TEEN]&amp;region=[REGION]&amp;x=[X]&amp;y=[Y]&amp;z=[Z]&amp;session=[SESSION]</string>
6075 </map> 6582 </map>
6076 <key>SelectMovableOnly</key> 6583 <key>SelectMovableOnly</key>
6077 <map> 6584 <map>
6078 <key>Comment</key> 6585 <key>Comment</key>
6079 <string>Select only objects you can move</string> 6586 <string>Select only objects you can move</string>
6080 <key>Persist</key> 6587 <key>Persist</key>
6081 <integer>1</integer> 6588 <integer>1</integer>
6082 <key>Type</key> 6589 <key>Type</key>
6083 <string>Boolean</string> 6590 <string>Boolean</string>
6084 <key>Value</key> 6591 <key>Value</key>
6085 <integer>0</integer> 6592 <integer>0</integer>
6086 </map> 6593 </map>
6087 <key>SelectOwnedOnly</key> 6594 <key>SelectOwnedOnly</key>
6088 <map> 6595 <map>
6089 <key>Comment</key> 6596 <key>Comment</key>
6090 <string>Select only objects you own</string> 6597 <string>Select only objects you own</string>
6091 <key>Persist</key> 6598 <key>Persist</key>
6092 <integer>1</integer> 6599 <integer>1</integer>
6093 <key>Type</key> 6600 <key>Type</key>
6094 <string>Boolean</string> 6601 <string>Boolean</string>
6095 <key>Value</key> 6602 <key>Value</key>
6096 <integer>0</integer> 6603 <integer>0</integer>
6097 </map> 6604 </map>
6098 <key>SelectionHighlightAlpha</key> 6605 <key>SelectionHighlightAlpha</key>
6099 <map> 6606 <map>
6100 <key>Comment</key> 6607 <key>Comment</key>
6101 <string>Opacity of selection highlight (0.0 = completely transparent, 1.0 = completely opaque)</string> 6608 <string>Opacity of selection highlight (0.0 = completely transparent, 1.0 = completely opaque)</string>
6102 <key>Persist</key> 6609 <key>Persist</key>
6103 <integer>1</integer> 6610 <integer>1</integer>
6104 <key>Type</key> 6611 <key>Type</key>
6105 <string>F32</string> 6612 <string>F32</string>
6106 <key>Value</key> 6613 <key>Value</key>
6107 <real>0.4000000059604644775390625</real> 6614 <real>0.40000000596</real>
6108 </map> 6615 </map>
6109 <key>SelectionHighlightAlphaTest</key> 6616 <key>SelectionHighlightAlphaTest</key>
6110 <map> 6617 <map>
6111 <key>Comment</key> 6618 <key>Comment</key>
6112 <string>Alpha value below which pixels are displayed on selection highlight line (0.0 = show all pixels, 1.0 = show now pixels)</string> 6619 <string>Alpha value below which pixels are displayed on selection highlight line (0.0 = show all pixels, 1.0 = show now pixels)</string>
6113 <key>Persist</key> 6620 <key>Persist</key>
6114 <integer>1</integer> 6621 <integer>1</integer>
6115 <key>Type</key> 6622 <key>Type</key>
6116 <string>F32</string> 6623 <string>F32</string>
6117 <key>Value</key> 6624 <key>Value</key>
6118 <real>0.1</real> 6625 <real>0.1</real>
6119 </map> 6626 </map>
6120 <key>SelectionHighlightThickness</key> 6627 <key>SelectionHighlightThickness</key>
6121 <map> 6628 <map>
6122 <key>Comment</key> 6629 <key>Comment</key>
6123 <string>Thickness of selection highlight line (fraction of view distance)</string> 6630 <string>Thickness of selection highlight line (fraction of view distance)</string>
6124 <key>Persist</key> 6631 <key>Persist</key>
6125 <integer>1</integer> 6632 <integer>1</integer>
6126 <key>Type</key> 6633 <key>Type</key>
6127 <string>F32</string> 6634 <string>F32</string>
6128 <key>Value</key> 6635 <key>Value</key>
6129 <real>0.009999999776482582092285156</real> 6636 <real>0.00999999977648</real>
6130 </map> 6637 </map>
6131 <key>SelectionHighlightUAnim</key> 6638 <key>SelectionHighlightUAnim</key>
6132 <map> 6639 <map>
6133 <key>Comment</key> 6640 <key>Comment</key>
6134 <string>Rate at which texture animates along U direction in selection highlight line (fraction of texture per second)</string> 6641 <string>Rate at which texture animates along U direction in selection highlight line (fraction of texture per second)</string>
6135 <key>Persist</key> 6642 <key>Persist</key>
6136 <integer>1</integer> 6643 <integer>1</integer>
6137 <key>Type</key> 6644 <key>Type</key>
6138 <string>F32</string> 6645 <string>F32</string>
6139 <key>Value</key> 6646 <key>Value</key>
6140 <real>0</real> 6647 <real>0.0</real>
6141 </map> 6648 </map>
6142 <key>SelectionHighlightUScale</key> 6649 <key>SelectionHighlightUScale</key>
6143 <map> 6650 <map>
6144 <key>Comment</key> 6651 <key>Comment</key>
6145 <string>Scale of texture display on selection highlight line (fraction of texture size)</string> 6652 <string>Scale of texture display on selection highlight line (fraction of texture size)</string>
6146 <key>Persist</key> 6653 <key>Persist</key>
6147 <integer>1</integer> 6654 <integer>1</integer>
6148 <key>Type</key> 6655 <key>Type</key>
6149 <string>F32</string> 6656 <string>F32</string>
6150 <key>Value</key> 6657 <key>Value</key>
6151 <real>0.1</real> 6658 <real>0.1</real>
6152 </map> 6659 </map>
6153 <key>SelectionHighlightVAnim</key> 6660 <key>SelectionHighlightVAnim</key>
6154 <map> 6661 <map>
6155 <key>Comment</key> 6662 <key>Comment</key>
6156 <string>Rate at which texture animates along V direction in selection highlight line (fraction of texture per second)</string> 6663 <string>Rate at which texture animates along V direction in selection highlight line (fraction of texture per second)</string>
6157 <key>Persist</key> 6664 <key>Persist</key>
6158 <integer>1</integer> 6665 <integer>1</integer>
6159 <key>Type</key> 6666 <key>Type</key>
6160 <string>F32</string> 6667 <string>F32</string>
6161 <key>Value</key> 6668 <key>Value</key>
6162 <real>0.5</real> 6669 <real>0.5</real>
6163 </map> 6670 </map>
6164 <key>SelectionHighlightVScale</key> 6671 <key>SelectionHighlightVScale</key>
6165 <map> 6672 <map>
6166 <key>Comment</key> 6673 <key>Comment</key>
6167 <string>Scale of texture display on selection highlight line (fraction of texture size)</string> 6674 <string>Scale of texture display on selection highlight line (fraction of texture size)</string>
6168 <key>Persist</key> 6675 <key>Persist</key>
6169 <integer>1</integer> 6676 <integer>1</integer>
6170 <key>Type</key> 6677 <key>Type</key>
6171 <string>F32</string> 6678 <string>F32</string>
6172 <key>Value</key> 6679 <key>Value</key>
6173 <real>1</real> 6680 <real>1.0</real>
6174 </map> 6681 </map>
6175 <key>ServerChoice</key> 6682 <key>ServerChoice</key>
6176 <map> 6683 <map>
6177 <key>Comment</key> 6684 <key>Comment</key>
6178 <string>[DO NOT MODIFY] Controls which grid you connect to</string> 6685 <string>[DO NOT MODIFY] Controls which grid you connect to</string>
6179 <key>Persist</key> 6686 <key>Persist</key>
6180 <integer>1</integer> 6687 <integer>1</integer>
6181 <key>Type</key> 6688 <key>Type</key>
6182 <string>S32</string> 6689 <string>S32</string>
6183 <key>Value</key> 6690 <key>Value</key>
6184 <integer>0</integer> 6691 <integer>0</integer>
6185 </map> 6692 </map>
6186 <key>ShowAllObjectHoverTip</key>
6187 <map>
6188 <key>Comment</key>
6189 <string>Show descriptive tooltip when mouse hovers over non-interactive and interactive objects.</string>
6190 <key>Persist</key>
6191 <integer>1</integer>
6192 <key>Type</key>
6193 <string>Boolean</string>
6194 <key>Value</key>
6195 <integer>0</integer>
6196 </map>
6197 <key>ShowActiveSpeakers</key> 6693 <key>ShowActiveSpeakers</key>
6198 <map> 6694 <map>
6199 <key>Comment</key> 6695 <key>Comment</key>
6200 <string>Display active speakers list on login</string> 6696 <string>Display active speakers list on login</string>
6201 <key>Persist</key> 6697 <key>Persist</key>
6202 <integer>1</integer> 6698 <integer>1</integer>
6203 <key>Type</key> 6699 <key>Type</key>
6204 <string>Boolean</string> 6700 <string>Boolean</string>
6205 <key>Value</key> 6701 <key>Value</key>
6206 <integer>0</integer> 6702 <integer>0</integer>
6207 </map> 6703 </map>
6704 <key>ShowAllObjectHoverTip</key>
6705 <map>
6706 <key>Comment</key>
6707 <string>Show descriptive tooltip when mouse hovers over non-interactive and interactive objects.</string>
6708 <key>Persist</key>
6709 <integer>1</integer>
6710 <key>Type</key>
6711 <string>Boolean</string>
6712 <key>Value</key>
6713 <integer>0</integer>
6714 </map>
6208 <key>ShowAxes</key> 6715 <key>ShowAxes</key>
6209 <map> 6716 <map>
6210 <key>Comment</key> 6717 <key>Comment</key>
6211 <string>Render coordinate frame at your position</string> 6718 <string>Render coordinate frame at your position</string>
6212 <key>Persist</key> 6719 <key>Persist</key>
6213 <integer>1</integer> 6720 <integer>1</integer>
6214 <key>Type</key> 6721 <key>Type</key>
6215 <string>Boolean</string> 6722 <string>Boolean</string>
6216 <key>Value</key> 6723 <key>Value</key>
6217 <integer>0</integer> 6724 <integer>0</integer>
6218 </map> 6725 </map>
6219 <key>ShowCameraControls</key> 6726 <key>ShowCameraControls</key>
6220 <map> 6727 <map>
6221 <key>Comment</key> 6728 <key>Comment</key>
6222 <string>Display camera controls on login</string> 6729 <string>Display camera controls on login</string>
6223 <key>Persist</key> 6730 <key>Persist</key>
6224 <integer>1</integer> 6731 <integer>1</integer>
6225 <key>Type</key> 6732 <key>Type</key>
6226 <string>Boolean</string> 6733 <string>Boolean</string>
6227 <key>Value</key> 6734 <key>Value</key>
6228 <integer>1</integer> 6735 <integer>1</integer>
6229 </map> 6736 </map>
6230 <key>ShowChatHistory</key> 6737 <key>ShowChatHistory</key>
6231 <map> 6738 <map>
6232 <key>Comment</key> 6739 <key>Comment</key>
6233 <string /> 6740 <string />
6234 <key>Persist</key> 6741 <key>Persist</key>
6235 <integer>0</integer> 6742 <integer>0</integer>
6236 <key>Type</key> 6743 <key>Type</key>
6237 <string>Boolean</string> 6744 <string>Boolean</string>
6238 <key>Value</key> 6745 <key>Value</key>
6239 <integer>0</integer> 6746 <integer>0</integer>
6240 </map> 6747 </map>
6241 <key>ShowCommunicate</key> 6748 <key>ShowCommunicate</key>
6242 <map> 6749 <map>
6243 <key>Comment</key> 6750 <key>Comment</key>
6244 <string /> 6751 <string />
6245 <key>Persist</key> 6752 <key>Persist</key>
6246 <integer>0</integer> 6753 <integer>0</integer>
6247 <key>Type</key> 6754 <key>Type</key>
6248 <string>Boolean</string> 6755 <string>Boolean</string>
6249 <key>Value</key> 6756 <key>Value</key>
6250 <integer>0</integer> 6757 <integer>0</integer>
6251 </map> 6758 </map>
6252 <key>ShowConsoleWindow</key> 6759 <key>ShowConsoleWindow</key>
6253 <map> 6760 <map>
6254 <key>Comment</key> 6761 <key>Comment</key>
6255 <string>Show log in separate OS window</string> 6762 <string>Show log in separate OS window</string>
6256 <key>Persist</key> 6763 <key>Persist</key>
6257 <integer>1</integer> 6764 <integer>1</integer>
6258 <key>Type</key> 6765 <key>Type</key>
6259 <string>Boolean</string> 6766 <string>Boolean</string>
6260 <key>Value</key> 6767 <key>Value</key>
6261 <integer>0</integer> 6768 <integer>0</integer>
6262 </map> 6769 </map>
6263 <key>ShowCrosshairs</key> 6770 <key>ShowCrosshairs</key>
6264 <map> 6771 <map>
6265 <key>Comment</key> 6772 <key>Comment</key>
6266 <string>Display crosshairs when in mouselook mode</string> 6773 <string>Display crosshairs when in mouselook mode</string>
6267 <key>Persist</key> 6774 <key>Persist</key>
6268 <integer>1</integer> 6775 <integer>1</integer>
6269 <key>Type</key> 6776 <key>Type</key>
6270 <string>Boolean</string> 6777 <string>Boolean</string>
6271 <key>Value</key> 6778 <key>Value</key>
6272 <integer>1</integer> 6779 <integer>1</integer>
6273 </map> 6780 </map>
6274 <key>ShowDebugConsole</key> 6781 <key>ShowDebugConsole</key>
6275 <map> 6782 <map>
6276 <key>Comment</key> 6783 <key>Comment</key>
6277 <string>Show log in SL window</string> 6784 <string>Show log in SL window</string>
6278 <key>Persist</key> 6785 <key>Persist</key>
6279 <integer>1</integer> 6786 <integer>1</integer>
6280 <key>Type</key> 6787 <key>Type</key>
6281 <string>Boolean</string> 6788 <string>Boolean</string>
6282 <key>Value</key> 6789 <key>Value</key>
6283 <integer>0</integer> 6790 <integer>0</integer>
6284 </map> 6791 </map>
6285 <key>ShowDebugStats</key> 6792 <key>ShowDebugStats</key>
6286 <map> 6793 <map>
6287 <key>Comment</key> 6794 <key>Comment</key>
6288 <string>Show performance stats display</string> 6795 <string>Show performance stats display</string>
6289 <key>Persist</key> 6796 <key>Persist</key>
6290 <integer>1</integer> 6797 <integer>1</integer>
6291 <key>Type</key> 6798 <key>Type</key>
6292 <string>Boolean</string> 6799 <string>Boolean</string>
6293 <key>Value</key> 6800 <key>Value</key>
6294 <integer>0</integer> 6801 <integer>0</integer>
6295 </map> 6802 </map>
6296 <key>ShowDepthBuffer</key> 6803 <key>ShowDepthBuffer</key>
6297 <map> 6804 <map>
6298 <key>Comment</key> 6805 <key>Comment</key>
6299 <string>Show depth buffer contents</string> 6806 <string>Show depth buffer contents</string>
6300 <key>Persist</key> 6807 <key>Persist</key>
6301 <integer>1</integer> 6808 <integer>1</integer>
6302 <key>Type</key> 6809 <key>Type</key>
6303 <string>Boolean</string> 6810 <string>Boolean</string>
6304 <key>Value</key> 6811 <key>Value</key>
6305 <integer>0</integer> 6812 <integer>0</integer>
6306 </map> 6813 </map>
6307 <key>ShowDirectory</key> 6814 <key>ShowDirectory</key>
6308 <map> 6815 <map>
6309 <key>Comment</key> 6816 <key>Comment</key>
6310 <string /> 6817 <string />
6311 <key>Persist</key> 6818 <key>Persist</key>
6312 <integer>0</integer> 6819 <integer>0</integer>
6313 <key>Type</key> 6820 <key>Type</key>
6314 <string>Boolean</string> 6821 <string>Boolean</string>
6315 <key>Value</key> 6822 <key>Value</key>
6316 <integer>0</integer> 6823 <integer>0</integer>
6317 </map> 6824 </map>
6318 <key>ShowEmptyFoldersWhenSearching</key> 6825 <key>ShowEmptyFoldersWhenSearching</key>
6319 <map> 6826 <map>
6320 <key>Comment</key> 6827 <key>Comment</key>
6321 <string>Shows folders that do not have any visible contents when applying a filter to inventory</string> 6828 <string>Shows folders that do not have any visible contents when applying a filter to inventory</string>
6322 <key>Persist</key> 6829 <key>Persist</key>
6323 <integer>1</integer> 6830 <integer>1</integer>
6324 <key>Type</key> 6831 <key>Type</key>
6325 <string>Boolean</string> 6832 <string>Boolean</string>
6326 <key>Value</key> 6833 <key>Value</key>
6327 <integer>0</integer> 6834 <integer>0</integer>
6328 </map> 6835 </map>
6329 <key>ShowHoverTips</key> 6836 <key>ShowHoverTips</key>
6330 <map> 6837 <map>
6331 <key>Comment</key> 6838 <key>Comment</key>
6332 <string>Show descriptive tooltip when mouse hovers over items in world</string> 6839 <string>Show descriptive tooltip when mouse hovers over items in world</string>
6333 <key>Persist</key> 6840 <key>Persist</key>
6334 <integer>1</integer> 6841 <integer>1</integer>
6335 <key>Type</key> 6842 <key>Type</key>
6336 <string>Boolean</string> 6843 <string>Boolean</string>
6337 <key>Value</key> 6844 <key>Value</key>
6338 <integer>1</integer> 6845 <integer>1</integer>
6339 </map> 6846 </map>
6340 <key>ShowInventory</key> 6847 <key>ShowInventory</key>
6341 <map> 6848 <map>
6342 <key>Comment</key> 6849 <key>Comment</key>
6343 <string>Open inventory window on login</string> 6850 <string>Open inventory window on login</string>
6344 <key>Persist</key> 6851 <key>Persist</key>
6345 <integer>1</integer> 6852 <integer>1</integer>
6346 <key>Type</key> 6853 <key>Type</key>
6347 <string>Boolean</string> 6854 <string>Boolean</string>
6348 <key>Value</key> 6855 <key>Value</key>
6349 <integer>0</integer> 6856 <integer>0</integer>
6350 </map> 6857 </map>
6351 <key>ShowLandHoverTip</key> 6858 <key>ShowLandHoverTip</key>
6352 <map> 6859 <map>
6353 <key>Comment</key> 6860 <key>Comment</key>
6354 <string>Show descriptive tooltip when mouse hovers over land</string> 6861 <string>Show descriptive tooltip when mouse hovers over land</string>
6355 <key>Persist</key> 6862 <key>Persist</key>
6356 <integer>1</integer> 6863 <integer>1</integer>
6357 <key>Type</key> 6864 <key>Type</key>
6358 <string>Boolean</string> 6865 <string>Boolean</string>
6359 <key>Value</key> 6866 <key>Value</key>
6360 <integer>0</integer> 6867 <integer>0</integer>
6361 </map> 6868 </map>
6362 <key>ShowLeaders</key> 6869 <key>ShowLeaders</key>
6363 <map> 6870 <map>
6364 <key>Comment</key> 6871 <key>Comment</key>
6365 <string /> 6872 <string />
6366 <key>Persist</key> 6873 <key>Persist</key>
6367 <integer>0</integer> 6874 <integer>0</integer>
6368 <key>Type</key> 6875 <key>Type</key>
6369 <string>Boolean</string> 6876 <string>Boolean</string>
6370 <key>Value</key> 6877 <key>Value</key>
6371 <integer>0</integer> 6878 <integer>0</integer>
6372 </map> 6879 </map>
6373 <key>ShowMatureClassifieds</key> 6880 <key>ShowMatureClassifieds</key>
6374 <map> 6881 <map>
6375 <key>Comment</key> 6882 <key>Comment</key>
6376 <string>Display results of find classifieds that are flagged as mature</string> 6883 <string>Display results of find classifieds that are flagged as mature</string>
6377 <key>Persist</key> 6884 <key>Persist</key>
6378 <integer>1</integer> 6885 <integer>1</integer>
6379 <key>Type</key> 6886 <key>Type</key>
6380 <string>Boolean</string> 6887 <string>Boolean</string>
6381 <key>Value</key> 6888 <key>Value</key>
6382 <integer>0</integer> 6889 <integer>0</integer>
6383 </map> 6890 </map>
6384 <key>ShowMatureEvents</key> 6891 <key>ShowMatureEvents</key>
6385 <map> 6892 <map>
6386 <key>Comment</key> 6893 <key>Comment</key>
6387 <string>Display results of find events that are flagged as mature</string> 6894 <string>Display results of find events that are flagged as mature</string>
6388 <key>Persist</key> 6895 <key>Persist</key>
6389 <integer>1</integer> 6896 <integer>1</integer>
6390 <key>Type</key> 6897 <key>Type</key>
6391 <string>Boolean</string> 6898 <string>Boolean</string>
6392 <key>Value</key> 6899 <key>Value</key>
6393 <integer>0</integer> 6900 <integer>0</integer>
6394 </map> 6901 </map>
6395 <key>ShowMatureFindAll</key> 6902 <key>ShowMatureFindAll</key>
6396 <map> 6903 <map>
6397 <key>Comment</key> 6904 <key>Comment</key>
6398 <string>Display results of find all that are in mature sims</string> 6905 <string>Display results of find all that are in mature sims</string>
6399 <key>Persist</key> 6906 <key>Persist</key>
6400 <integer>1</integer> 6907 <integer>1</integer>
6401 <key>Type</key> 6908 <key>Type</key>
6402 <string>Boolean</string> 6909 <string>Boolean</string>
6403 <key>Value</key> 6910 <key>Value</key>
6404 <integer>0</integer> 6911 <integer>0</integer>
6405 </map> 6912 </map>
6406 <key>ShowMatureGroups</key> 6913 <key>ShowMatureGroups</key>
6407 <map> 6914 <map>
6408 <key>Comment</key> 6915 <key>Comment</key>
6409 <string>Display results of find groups that are in flagged as mature</string> 6916 <string>Display results of find groups that are in flagged as mature</string>
6410 <key>Persist</key> 6917 <key>Persist</key>
6411 <integer>1</integer> 6918 <integer>1</integer>
6412 <key>Type</key> 6919 <key>Type</key>
6413 <string>Boolean</string> 6920 <string>Boolean</string>
6414 <key>Value</key> 6921 <key>Value</key>
6415 <integer>1</integer> 6922 <integer>1</integer>
6416 </map> 6923 </map>
6417 <key>ShowMatureSims</key> 6924 <key>ShowMatureSims</key>
6418 <map> 6925 <map>
6419 <key>Comment</key> 6926 <key>Comment</key>
6420 <string>Display results of find places or find popular that are in mature sims</string> 6927 <string>Display results of find places or find popular that are in mature sims</string>
6421 <key>Persist</key> 6928 <key>Persist</key>
6422 <integer>1</integer> 6929 <integer>1</integer>
6423 <key>Type</key> 6930 <key>Type</key>
6424 <string>Boolean</string> 6931 <string>Boolean</string>
6425 <key>Value</key> 6932 <key>Value</key>
6426 <integer>0</integer> 6933 <integer>0</integer>
6427 </map> 6934 </map>
6428 <key>ShowMiniMap</key> 6935 <key>ShowMiniMap</key>
6429 <map> 6936 <map>
6430 <key>Comment</key> 6937 <key>Comment</key>
6431 <string>Display mini map on login</string> 6938 <string>Display mini map on login</string>
6432 <key>Persist</key> 6939 <key>Persist</key>
6433 <integer>1</integer> 6940 <integer>1</integer>
6434 <key>Type</key> 6941 <key>Type</key>
6435 <string>Boolean</string> 6942 <string>Boolean</string>
6436 <key>Value</key> 6943 <key>Value</key>
6437 <integer>1</integer> 6944 <integer>1</integer>
6438 </map> 6945 </map>
6439 <key>ShowMovementControls</key> 6946 <key>ShowMovementControls</key>
6440 <map> 6947 <map>
6441 <key>Comment</key> 6948 <key>Comment</key>
6442 <string>Display movement controls on login</string> 6949 <string>Display movement controls on login</string>
6443 <key>Persist</key> 6950 <key>Persist</key>
6444 <integer>1</integer> 6951 <integer>1</integer>
6445 <key>Type</key> 6952 <key>Type</key>
6446 <string>Boolean</string> 6953 <string>Boolean</string>
6447 <key>Value</key> 6954 <key>Value</key>
6448 <integer>1</integer> 6955 <integer>1</integer>
6449 </map> 6956 </map>
6450 <key>ShowNearClip</key> 6957 <key>ShowNearClip</key>
6451 <map> 6958 <map>
6452 <key>Comment</key> 6959 <key>Comment</key>
6453 <string /> 6960 <string />
6454 <key>Persist</key> 6961 <key>Persist</key>
6455 <integer>0</integer> 6962 <integer>0</integer>
6456 <key>Type</key> 6963 <key>Type</key>
6457 <string>Boolean</string> 6964 <string>Boolean</string>
6458 <key>Value</key> 6965 <key>Value</key>
6459 <integer>0</integer> 6966 <integer>0</integer>
6460 </map> 6967 </map>
6461 <key>ShowNewInventory</key> 6968 <key>ShowNewInventory</key>
6462 <map> 6969 <map>
6463 <key>Comment</key> 6970 <key>Comment</key>
6464 <string>Automatically views new notecards/textures/landmarks</string> 6971 <string>Automatically views new notecards/textures/landmarks</string>
6465 <key>Persist</key> 6972 <key>Persist</key>
6466 <integer>1</integer> 6973 <integer>1</integer>
6467 <key>Type</key> 6974 <key>Type</key>
6468 <string>Boolean</string> 6975 <string>Boolean</string>
6469 <key>Value</key> 6976 <key>Value</key>
6470 <integer>1</integer> 6977 <integer>1</integer>
6471 </map> 6978 </map>
6472 <key>ShowObjectUpdates</key> 6979 <key>ShowObjectUpdates</key>
6473 <map> 6980 <map>
6474 <key>Comment</key> 6981 <key>Comment</key>
6475 <string>Show when update messages are received for individual objects</string> 6982 <string>Show when update messages are received for individual objects</string>
6476 <key>Persist</key> 6983 <key>Persist</key>
6477 <integer>1</integer> 6984 <integer>1</integer>
6478 <key>Type</key> 6985 <key>Type</key>
6479 <string>Boolean</string> 6986 <string>Boolean</string>
6480 <key>Value</key> 6987 <key>Value</key>
6481 <integer>0</integer> 6988 <integer>0</integer>
6482 </map> 6989 </map>
6483 <key>ShowOverlayTitle</key> 6990 <key>ShowOverlayTitle</key>
6484 <map> 6991 <map>
6485 <key>Comment</key> 6992 <key>Comment</key>
6486 <string>Prints watermark text message on screen</string> 6993 <string>Prints watermark text message on screen</string>
6487 <key>Persist</key> 6994 <key>Persist</key>
6488 <integer>1</integer> 6995 <integer>1</integer>
6489 <key>Type</key> 6996 <key>Type</key>
6490 <string>Boolean</string> 6997 <string>Boolean</string>
6491 <key>Value</key> 6998 <key>Value</key>
6492 <integer>0</integer> 6999 <integer>0</integer>
6493 </map> 7000 </map>
6494 <key>ShowParcelOwners</key> 7001 <key>ShowParcelOwners</key>
6495 <map> 7002 <map>
6496 <key>Comment</key> 7003 <key>Comment</key>
6497 <string /> 7004 <string />
6498 <key>Persist</key> 7005 <key>Persist</key>
6499 <integer>0</integer> 7006 <integer>0</integer>
6500 <key>Type</key> 7007 <key>Type</key>
6501 <string>Boolean</string> 7008 <string>Boolean</string>
6502 <key>Value</key> 7009 <key>Value</key>
6503 <integer>0</integer> 7010 <integer>0</integer>
6504 </map> 7011 </map>
6505 <key>ShowPermissions</key> 7012 <key>ShowPermissions</key>
6506 <map> 7013 <map>
6507 <key>Comment</key> 7014 <key>Comment</key>
6508 <string /> 7015 <string />
6509 <key>Persist</key> 7016 <key>Persist</key>
6510 <integer>0</integer> 7017 <integer>0</integer>
6511 <key>Type</key> 7018 <key>Type</key>
6512 <string>Boolean</string> 7019 <string>Boolean</string>
6513 <key>Value</key> 7020 <key>Value</key>
6514 <integer>0</integer> 7021 <integer>0</integer>
6515 </map> 7022 </map>
6516 <key>ShowPropertyLines</key> 7023 <key>ShowPropertyLines</key>
6517 <map> 7024 <map>
6518 <key>Comment</key> 7025 <key>Comment</key>
6519 <string>Show line overlay demarking property boundaries</string> 7026 <string>Show line overlay demarking property boundaries</string>
6520 <key>Persist</key> 7027 <key>Persist</key>
6521 <integer>1</integer> 7028 <integer>1</integer>
6522 <key>Type</key> 7029 <key>Type</key>
6523 <string>Boolean</string> 7030 <string>Boolean</string>
6524 <key>Value</key> 7031 <key>Value</key>
6525 <integer>0</integer> 7032 <integer>0</integer>
6526 </map> 7033 </map>
6527 <key>ShowSearchBar</key> 7034 <key>ShowSearchBar</key>
6528 <map> 7035 <map>
6529 <key>Comment</key> 7036 <key>Comment</key>
6530 <string>Show the Search Bar in the Status Overlay</string> 7037 <string>Show the Search Bar in the Status Overlay</string>
6531 <key>Persist</key> 7038 <key>Persist</key>
6532 <integer>1</integer> 7039 <integer>1</integer>
6533 <key>Type</key> 7040 <key>Type</key>
6534 <string>Boolean</string> 7041 <string>Boolean</string>
6535 <key>Value</key> 7042 <key>Value</key>
6536 <integer>1</integer> 7043 <integer>1</integer>
6537 </map> 7044 </map>
6538 <key>ShowSelectionBeam</key> 7045 <key>ShowSelectionBeam</key>
6539 <map> 7046 <map>
6540 <key>Comment</key> 7047 <key>Comment</key>
6541 <string>Show selection particle beam when selecting or interacting with objects.</string> 7048 <string>Show selection particle beam when selecting or interacting with objects.</string>
6542 <key>Persist</key> 7049 <key>Persist</key>
6543 <integer>1</integer> 7050 <integer>1</integer>
6544 <key>Type</key> 7051 <key>Type</key>
6545 <string>Boolean</string> 7052 <string>Boolean</string>
6546 <key>Value</key> 7053 <key>Value</key>
6547 <integer>1</integer> 7054 <integer>1</integer>
6548 </map> 7055 </map>
6549 <key>ShowStartLocation</key> 7056 <key>ShowStartLocation</key>
6550 <map> 7057 <map>
6551 <key>Comment</key> 7058 <key>Comment</key>
6552 <string>Display starting location menu on login screen</string> 7059 <string>Display starting location menu on login screen</string>
6553 <key>Persist</key> 7060 <key>Persist</key>
6554 <integer>1</integer> 7061 <integer>1</integer>
6555 <key>Type</key> 7062 <key>Type</key>
6556 <string>Boolean</string> 7063 <string>Boolean</string>
6557 <key>Value</key> 7064 <key>Value</key>
6558 <integer>0</integer> 7065 <integer>0</integer>
6559 </map> 7066 </map>
6560 <key>ShowTangentBasis</key> 7067 <key>ShowTangentBasis</key>
6561 <map> 7068 <map>
6562 <key>Comment</key> 7069 <key>Comment</key>
6563 <string>Render normal and binormal (debugging bump mapping)</string> 7070 <string>Render normal and binormal (debugging bump mapping)</string>
6564 <key>Persist</key> 7071 <key>Persist</key>
6565 <integer>1</integer> 7072 <integer>1</integer>
6566 <key>Type</key> 7073 <key>Type</key>
6567 <string>Boolean</string> 7074 <string>Boolean</string>
6568 <key>Value</key> 7075 <key>Value</key>
6569 <integer>0</integer> 7076 <integer>0</integer>
6570 </map> 7077 </map>
6571 <key>ShowToolBar</key> 7078 <key>ShowToolBar</key>
6572 <map> 7079 <map>
6573 <key>Comment</key> 7080 <key>Comment</key>
6574 <string>Show toolbar at bottom of screen</string> 7081 <string>Show toolbar at bottom of screen</string>
6575 <key>Persist</key> 7082 <key>Persist</key>
6576 <integer>1</integer> 7083 <integer>1</integer>
6577 <key>Type</key> 7084 <key>Type</key>
6578 <string>Boolean</string> 7085 <string>Boolean</string>
6579 <key>Value</key> 7086 <key>Value</key>
6580 <integer>1</integer> 7087 <integer>1</integer>
6581 </map> 7088 </map>
6582 <key>ShowTools</key> 7089 <key>ShowTools</key>
6583 <map> 7090 <map>
6584 <key>Comment</key> 7091 <key>Comment</key>
6585 <string /> 7092 <string />
6586 <key>Persist</key> 7093 <key>Persist</key>
6587 <integer>0</integer> 7094 <integer>0</integer>
6588 <key>Type</key> 7095 <key>Type</key>
6589 <string>Boolean</string> 7096 <string>Boolean</string>
6590 <key>Value</key> 7097 <key>Value</key>
6591 <integer>0</integer> 7098 <integer>0</integer>
6592 </map> 7099 </map>
6593 <key>ShowVoiceChannelPopup</key> 7100 <key>ShowVoiceChannelPopup</key>
6594 <map> 7101 <map>
6595 <key>Comment</key> 7102 <key>Comment</key>
6596 <string>Controls visibility of the current voice channel popup above the voice tab</string> 7103 <string>Controls visibility of the current voice channel popup above the voice tab</string>
6597 <key>Persist</key> 7104 <key>Persist</key>
6598 <integer>1</integer> 7105 <integer>1</integer>
6599 <key>Type</key> 7106 <key>Type</key>
6600 <string>Boolean</string> 7107 <string>Boolean</string>
6601 <key>Value</key> 7108 <key>Value</key>
6602 <integer>0</integer> 7109 <integer>0</integer>
6603 </map> 7110 </map>
6604 <key>ShowVolumeSettingsPopup</key> 7111 <key>ShowVolumeSettingsPopup</key>
6605 <map> 7112 <map>
6606 <key>Comment</key> 7113 <key>Comment</key>
6607 <string>Show individual volume slider for voice, sound effects, etc</string> 7114 <string>Show individual volume slider for voice, sound effects, etc</string>
6608 <key>Persist</key> 7115 <key>Persist</key>
6609 <integer>1</integer> 7116 <integer>1</integer>
6610 <key>Type</key> 7117 <key>Type</key>
6611 <string>Boolean</string> 7118 <string>Boolean</string>
6612 <key>Value</key> 7119 <key>Value</key>
6613 <integer>0</integer> 7120 <integer>0</integer>
6614 </map> 7121 </map>
6615 <key>ShowWorldMap</key> 7122 <key>ShowWorldMap</key>
6616 <map> 7123 <map>
6617 <key>Comment</key> 7124 <key>Comment</key>
6618 <string>Display world map on login</string> 7125 <string>Display world map on login</string>
6619 <key>Persist</key> 7126 <key>Persist</key>
6620 <integer>1</integer> 7127 <integer>1</integer>
6621 <key>Type</key> 7128 <key>Type</key>
6622 <string>Boolean</string> 7129 <string>Boolean</string>
6623 <key>Value</key> 7130 <key>Value</key>
6624 <integer>0</integer> 7131 <integer>0</integer>
6625 </map> 7132 </map>
6626 <key>ShowXUINames</key> 7133 <key>ShowXUINames</key>
6627 <map> 7134 <map>
6628 <key>Comment</key> 7135 <key>Comment</key>
6629 <string>Display XUI Names as Tooltips</string> 7136 <string>Display XUI Names as Tooltips</string>
6630 <key>Persist</key> 7137 <key>Persist</key>
6631 <integer>1</integer> 7138 <integer>1</integer>
6632 <key>Type</key> 7139 <key>Type</key>
6633 <string>Boolean</string> 7140 <string>Boolean</string>
6634 <key>Value</key> 7141 <key>Value</key>
6635 <integer>0</integer> 7142 <integer>0</integer>
6636 </map> 7143 </map>
6637 <key>SitBtnState</key> 7144 <key>SitBtnState</key>
6638 <map> 7145 <map>
6639 <key>Comment</key> 7146 <key>Comment</key>
6640 <string /> 7147 <string />
6641 <key>Persist</key> 7148 <key>Persist</key>
6642 <integer>0</integer> 7149 <integer>0</integer>
6643 <key>Type</key> 7150 <key>Type</key>
6644 <string>Boolean</string> 7151 <string>Boolean</string>
6645 <key>Value</key> 7152 <key>Value</key>
6646 <integer>0</integer> 7153 <integer>0</integer>
6647 </map> 7154 </map>
6648 <key>SkinFolder</key> 7155 <key>SkinFolder</key>
6649 <map> 7156 <map>
6650 <key>Comment</key> 7157 <key>Comment</key>
6651 <string>The skin folder to use.</string> 7158 <string>The skin folder to use.</string>
6652 <key>Persist</key> 7159 <key>Persist</key>
6653 <integer>1</integer> 7160 <integer>1</integer>
6654 <key>Type</key> 7161 <key>Type</key>
6655 <string>String</string> 7162 <string>String</string>
6656 <key>Value</key> 7163 <key>Value</key>
6657 <string /> 7164 <string />
6658 </map> 7165 </map>
6659 <key>SkyAmbientScale</key> 7166 <key>SkyAmbientScale</key>
6660 <map> 7167 <map>
6661 <key>Comment</key> 7168 <key>Comment</key>
6662 <string>Controls strength of ambient, or non-directional light from the sun and moon (fraction or multiple of default ambient level)</string> 7169 <string>Controls strength of ambient, or non-directional light from the sun and moon (fraction or multiple of default ambient level)</string>
6663 <key>Persist</key> 7170 <key>Persist</key>
6664 <integer>1</integer> 7171 <integer>1</integer>
6665 <key>Type</key> 7172 <key>Type</key>
6666 <string>F32</string> 7173 <string>F32</string>
6667 <key>Value</key> 7174 <key>Value</key>
6668 <real>0.300000011920928955078125</real> 7175 <real>0.300000011921</real>
6669 </map> 7176 </map>
7177 <key>SkyEditPresets</key>
7178 <map>
7179 <key>Comment</key>
7180 <string>Whether to be able to edit the sky defaults or not</string>
7181 <key>Persist</key>
7182 <integer>1</integer>
7183 <key>Type</key>
7184 <string>Boolean</string>
7185 <key>Value</key>
7186 <integer>0</integer>
7187 </map>
6670 <key>SkyNightColorShift</key> 7188 <key>SkyNightColorShift</key>
6671 <map> 7189 <map>
6672 <key>Comment</key> 7190 <key>Comment</key>
6673 <string>Controls moonlight color (base color applied to moon as light source)</string> 7191 <string>Controls moonlight color (base color applied to moon as light source)</string>
6674 <key>Persist</key> 7192 <key>Persist</key>
6675 <integer>1</integer> 7193 <integer>1</integer>
6676 <key>Type</key> 7194 <key>Type</key>
6677 <string>Color3</string> 7195 <string>Color3</string>
6678 <key>Value</key> 7196 <key>Value</key>
6679 <array> 7197 <array>
6680 <real>0.699999988079071044921875</real> 7198 <real>0.699999988079</real>
6681 <real>0.699999988079071044921875</real> 7199 <real>0.699999988079</real>
6682 <real>1</real> 7200 <real>1.0</real>
6683 </array> 7201 </array>
6684 </map> 7202 </map>
6685 <key>SkyOverrideSimSunPosition</key> 7203 <key>SkyOverrideSimSunPosition</key>
6686 <map> 7204 <map>
6687 <key>Comment</key> 7205 <key>Comment</key>
6688 <string /> 7206 <string />
6689 <key>Persist</key> 7207 <key>Persist</key>
6690 <integer>0</integer> 7208 <integer>0</integer>
6691 <key>Type</key> 7209 <key>Type</key>
6692 <string>Boolean</string> 7210 <string>Boolean</string>
6693 <key>Value</key> 7211 <key>Value</key>
6694 <integer>0</integer> 7212 <integer>0</integer>
6695 </map> 7213 </map>
6696 <key>SkySunDefaultPosition</key> 7214 <key>SkySunDefaultPosition</key>
6697 <map> 7215 <map>
6698 <key>Comment</key> 7216 <key>Comment</key>
6699 <string>Default position of sun in sky (direction in world coordinates)</string> 7217 <string>Default position of sun in sky (direction in world coordinates)</string>
6700 <key>Persist</key> 7218 <key>Persist</key>
6701 <integer>1</integer> 7219 <integer>1</integer>
6702 <key>Type</key> 7220 <key>Type</key>
6703 <string>Vector3</string> 7221 <string>Vector3</string>
6704 <key>Value</key> 7222 <key>Value</key>
6705 <array> 7223 <array>
6706 <real>1</real> 7224 <real>1.0</real>
6707 <real>0</real> 7225 <real>0.0</real>
6708 <real>0.1</real> 7226 <real>0.1</real>
6709 </array> 7227 </array>
6710 </map> 7228 </map>
6711 <key>SkyUseClassicClouds</key> 7229 <key>SkyUseClassicClouds</key>
6712 <map> 7230 <map>
6713 <key>Comment</key> 7231 <key>Comment</key>
6714 <string>Whether to use the old Second Life particle clouds or not</string> 7232 <string>Whether to use the old Second Life particle clouds or not</string>
6715 <key>Persist</key> 7233 <key>Persist</key>
6716 <integer>1</integer> 7234 <integer>1</integer>
6717 <key>Type</key> 7235 <key>Type</key>
6718 <string>Boolean</string> 7236 <string>Boolean</string>
6719 <key>Value</key> 7237 <key>Value</key>
6720 <integer>1</integer> 7238 <integer>1</integer>
6721 </map> 7239 </map>
6722 <key>SlideLeftBtnRect</key> 7240 <key>SlideLeftBtnRect</key>
6723 <map> 7241 <map>
6724 <key>Comment</key> 7242 <key>Comment</key>
6725 <string /> 7243 <string />
6726 <key>Persist</key> 7244 <key>Persist</key>
6727 <integer>0</integer> 7245 <integer>0</integer>
6728 <key>Type</key> 7246 <key>Type</key>
6729 <string>Rect</string> 7247 <string>Rect</string>
6730 <key>Value</key> 7248 <key>Value</key>
6731 <array> 7249 <array>
6732 <integer>20</integer> 7250 <integer>20</integer>
6733 <integer>54</integer> 7251 <integer>54</integer>
6734 <integer>45</integer> 7252 <integer>45</integer>
6735 <integer>29</integer> 7253 <integer>29</integer>
6736 </array> 7254 </array>
6737 </map> 7255 </map>
6738 <key>SlideRightBtnRect</key> 7256 <key>SlideRightBtnRect</key>
6739 <map> 7257 <map>
6740 <key>Comment</key> 7258 <key>Comment</key>
6741 <string /> 7259 <string />
6742 <key>Persist</key> 7260 <key>Persist</key>
6743 <integer>0</integer> 7261 <integer>0</integer>
6744 <key>Type</key> 7262 <key>Type</key>
6745 <string>Rect</string> 7263 <string>Rect</string>
6746 <key>Value</key> 7264 <key>Value</key>
6747 <array> 7265 <array>
6748 <integer>66</integer> 7266 <integer>66</integer>
6749 <integer>54</integer> 7267 <integer>54</integer>
6750 <integer>91</integer> 7268 <integer>91</integer>
6751 <integer>29</integer> 7269 <integer>29</integer>
6752 </array> 7270 </array>
6753 </map> 7271 </map>
6754 <key>SmallAvatarNames</key> 7272 <key>SmallAvatarNames</key>
6755 <map> 7273 <map>
6756 <key>Comment</key> 7274 <key>Comment</key>
6757 <string>Display avatar name text in smaller font</string> 7275 <string>Display avatar name text in smaller font</string>
6758 <key>Persist</key> 7276 <key>Persist</key>
6759 <integer>1</integer> 7277 <integer>1</integer>
6760 <key>Type</key> 7278 <key>Type</key>
6761 <string>Boolean</string> 7279 <string>Boolean</string>
6762 <key>Value</key> 7280 <key>Value</key>
6763 <integer>1</integer> 7281 <integer>1</integer>
6764 </map> 7282 </map>
6765 <key>SnapEnabled</key> 7283 <key>SnapEnabled</key>
6766 <map> 7284 <map>
6767 <key>Comment</key> 7285 <key>Comment</key>
6768 <string>Enable snapping to grid</string> 7286 <string>Enable snapping to grid</string>
6769 <key>Persist</key> 7287 <key>Persist</key>
6770 <integer>1</integer> 7288 <integer>1</integer>
6771 <key>Type</key> 7289 <key>Type</key>
6772 <string>Boolean</string> 7290 <string>Boolean</string>
6773 <key>Value</key> 7291 <key>Value</key>
6774 <integer>1</integer> 7292 <integer>1</integer>
6775 </map> 7293 </map>
6776 <key>SnapMargin</key> 7294 <key>SnapMargin</key>
6777 <map> 7295 <map>
6778 <key>Comment</key> 7296 <key>Comment</key>
6779 <string>Controls maximum distance between windows before they auto-snap together (pixels)</string> 7297 <string>Controls maximum distance between windows before they auto-snap together (pixels)</string>
6780 <key>Persist</key> 7298 <key>Persist</key>
6781 <integer>1</integer> 7299 <integer>1</integer>
6782 <key>Type</key> 7300 <key>Type</key>
6783 <string>S32</string> 7301 <string>S32</string>
6784 <key>Value</key> 7302 <key>Value</key>
6785 <integer>10</integer> 7303 <integer>10</integer>
6786 </map> 7304 </map>
6787 <key>SnapToMouseCursor</key> 7305 <key>SnapToMouseCursor</key>
6788 <map> 7306 <map>
6789 <key>Comment</key> 7307 <key>Comment</key>
6790 <string>When snapping to grid, center object on nearest grid point to mouse cursor</string> 7308 <string>When snapping to grid, center object on nearest grid point to mouse cursor</string>
6791 <key>Persist</key> 7309 <key>Persist</key>
6792 <integer>1</integer> 7310 <integer>1</integer>
6793 <key>Type</key> 7311 <key>Type</key>
6794 <string>Boolean</string> 7312 <string>Boolean</string>
6795 <key>Value</key> 7313 <key>Value</key>
6796 <integer>0</integer> 7314 <integer>0</integer>
6797 </map> 7315 </map>
6798 <key>SnapshotLocalLastResolution</key> 7316 <key>SnapshotLocalLastResolution</key>
6799 <map> 7317 <map>
6800 <key>Comment</key> 7318 <key>Comment</key>
6801 <string>Take next local snapshot at this resolution</string> 7319 <string>Take next local snapshot at this resolution</string>
6802 <key>Persist</key> 7320 <key>Persist</key>
6803 <integer>1</integer> 7321 <integer>1</integer>
6804 <key>Type</key> 7322 <key>Type</key>
6805 <string>S32</string> 7323 <string>S32</string>
6806 <key>Value</key> 7324 <key>Value</key>
6807 <integer>0</integer> 7325 <integer>0</integer>
6808 </map> 7326 </map>
6809 <key>SnapshotPostcardLastResolution</key> 7327 <key>SnapshotPostcardLastResolution</key>
6810 <map> 7328 <map>
6811 <key>Comment</key> 7329 <key>Comment</key>
6812 <string>Take next postcard snapshot at this resolution</string> 7330 <string>Take next postcard snapshot at this resolution</string>
6813 <key>Persist</key> 7331 <key>Persist</key>
6814 <integer>1</integer> 7332 <integer>1</integer>
6815 <key>Type</key> 7333 <key>Type</key>
6816 <string>S32</string> 7334 <string>S32</string>
6817 <key>Value</key> 7335 <key>Value</key>
6818 <integer>0</integer> 7336 <integer>0</integer>
6819 </map> 7337 </map>
6820 <key>SnapshotQuality</key> 7338 <key>SnapshotQuality</key>
6821 <map> 7339 <map>
6822 <key>Comment</key> 7340 <key>Comment</key>
6823 <string>Quality setting of postcard JPEGs (0 = worst, 100 = best)</string> 7341 <string>Quality setting of postcard JPEGs (0 = worst, 100 = best)</string>
6824 <key>Persist</key> 7342 <key>Persist</key>
6825 <integer>1</integer> 7343 <integer>1</integer>
6826 <key>Type</key> 7344 <key>Type</key>
6827 <string>S32</string> 7345 <string>S32</string>
6828 <key>Value</key> 7346 <key>Value</key>
6829 <integer>75</integer> 7347 <integer>75</integer>
6830 </map> 7348 </map>
6831 <key>SnapshotTextureLastResolution</key> 7349 <key>SnapshotTextureLastResolution</key>
6832 <map> 7350 <map>
6833 <key>Comment</key> 7351 <key>Comment</key>
6834 <string>Take next texture snapshot at this resolution</string> 7352 <string>Take next texture snapshot at this resolution</string>
6835 <key>Persist</key> 7353 <key>Persist</key>
6836 <integer>1</integer> 7354 <integer>1</integer>
6837 <key>Type</key> 7355 <key>Type</key>
6838 <string>S32</string> 7356 <string>S32</string>
6839 <key>Value</key> 7357 <key>Value</key>
6840 <integer>0</integer> 7358 <integer>0</integer>
6841 </map> 7359 </map>
6842 <key>SpeakingColor</key> 7360 <key>SpeakingColor</key>
6843 <map> 7361 <map>
6844 <key>Comment</key> 7362 <key>Comment</key>
6845 <string>Color of various indicators when resident is speaking on a voice channel.</string> 7363 <string>Color of various indicators when resident is speaking on a voice channel.</string>
6846 <key>Persist</key> 7364 <key>Persist</key>
6847 <integer>1</integer> 7365 <integer>1</integer>
6848 <key>Type</key> 7366 <key>Type</key>
6849 <string>Color4</string> 7367 <string>Color4</string>
6850 <key>Value</key> 7368 <key>Value</key>
6851 <array> 7369 <array>
6852 <real>0</real> 7370 <real>0.0</real>
6853 <real>1</real> 7371 <real>1.0</real>
6854 <real>0</real> 7372 <real>0.0</real>
6855 <real>1</real> 7373 <real>1.0</real>
6856 </array> 7374 </array>
6857 </map> 7375 </map>
6858 <key>SpeedTest</key> 7376 <key>SpeedTest</key>
6859 <map> 7377 <map>
6860 <key>Comment</key> 7378 <key>Comment</key>
6861 <string>Performance testing mode, no network</string> 7379 <string>Performance testing mode, no network</string>
6862 <key>Persist</key> 7380 <key>Persist</key>
6863 <integer>1</integer> 7381 <integer>1</integer>
6864 <key>Type</key> 7382 <key>Type</key>
6865 <string>Boolean</string> 7383 <string>Boolean</string>
6866 <key>Value</key> 7384 <key>Value</key>
6867 <integer>0</integer> 7385 <integer>0</integer>
6868 </map> 7386 </map>
6869 <key>StatsAutoRun</key> 7387 <key>StatsAutoRun</key>
6870 <map> 7388 <map>
6871 <key>Comment</key> 7389 <key>Comment</key>
6872 <string>Play back autopilot</string> 7390 <string>Play back autopilot</string>
6873 <key>Persist</key> 7391 <key>Persist</key>
6874 <integer>1</integer> 7392 <integer>1</integer>
6875 <key>Type</key> 7393 <key>Type</key>
6876 <string>Boolean</string> 7394 <string>Boolean</string>
6877 <key>Value</key> 7395 <key>Value</key>
6878 <integer>0</integer> 7396 <integer>0</integer>
6879 </map> 7397 </map>
6880 <key>StatsFile</key> 7398 <key>StatsFile</key>
6881 <map> 7399 <map>
6882 <key>Comment</key> 7400 <key>Comment</key>
6883 <string>Filename for stats logging output</string> 7401 <string>Filename for stats logging output</string>
6884 <key>Persist</key> 7402 <key>Persist</key>
6885 <integer>1</integer> 7403 <integer>1</integer>
6886 <key>Type</key> 7404 <key>Type</key>
6887 <string>String</string> 7405 <string>String</string>
6888 <key>Value</key> 7406 <key>Value</key>
6889 <string>fs.txt</string> 7407 <string>fs.txt</string>
6890 </map> 7408 </map>
6891 <key>StatsNumRuns</key> 7409 <key>StatsNumRuns</key>
6892 <map> 7410 <map>
6893 <key>Comment</key> 7411 <key>Comment</key>
6894 <string>Loop autopilot playback this number of times</string> 7412 <string>Loop autopilot playback this number of times</string>
6895 <key>Persist</key> 7413 <key>Persist</key>
6896 <integer>1</integer> 7414 <integer>1</integer>
6897 <key>Type</key> 7415 <key>Type</key>
6898 <string>S32</string> 7416 <string>S32</string>
6899 <key>Value</key> 7417 <key>Value</key>
6900 <integer>-1</integer> 7418 <integer>-1</integer>
6901 </map> 7419 </map>
6902 <key>StatsPilotFile</key> 7420 <key>StatsPilotFile</key>
6903 <map> 7421 <map>
6904 <key>Comment</key> 7422 <key>Comment</key>
6905 <string>Filename for stats logging autopilot path</string> 7423 <string>Filename for stats logging autopilot path</string>
6906 <key>Persist</key> 7424 <key>Persist</key>
6907 <integer>1</integer> 7425 <integer>1</integer>
6908 <key>Type</key> 7426 <key>Type</key>
6909 <string>String</string> 7427 <string>String</string>
6910 <key>Value</key> 7428 <key>Value</key>
6911 <string>pilot.txt</string> 7429 <string>pilot.txt</string>
6912 </map> 7430 </map>
6913 <key>StatsQuitAfterRuns</key> 7431 <key>StatsQuitAfterRuns</key>
6914 <map> 7432 <map>
6915 <key>Comment</key> 7433 <key>Comment</key>
6916 <string>Quit application after this number of autopilot playback runs</string> 7434 <string>Quit application after this number of autopilot playback runs</string>
6917 <key>Persist</key> 7435 <key>Persist</key>
6918 <integer>1</integer> 7436 <integer>1</integer>
6919 <key>Type</key> 7437 <key>Type</key>
6920 <string>Boolean</string> 7438 <string>Boolean</string>
6921 <key>Value</key> 7439 <key>Value</key>
6922 <integer>0</integer> 7440 <integer>0</integer>
6923 </map> 7441 </map>
6924 <key>StatsSessionTrackFrameStats</key> 7442 <key>StatsSessionTrackFrameStats</key>
6925 <map> 7443 <map>
6926 <key>Comment</key> 7444 <key>Comment</key>
6927 <string>Track rendering and network statistics</string> 7445 <string>Track rendering and network statistics</string>
6928 <key>Persist</key> 7446 <key>Persist</key>
6929 <integer>1</integer> 7447 <integer>1</integer>
6930 <key>Type</key> 7448 <key>Type</key>
6931 <string>Boolean</string> 7449 <string>Boolean</string>
6932 <key>Value</key> 7450 <key>Value</key>
6933 <integer>0</integer> 7451 <integer>0</integer>
6934 </map> 7452 </map>
6935 <key>StatsSummaryFile</key> 7453 <key>StatsSummaryFile</key>
6936 <map> 7454 <map>
6937 <key>Comment</key> 7455 <key>Comment</key>
6938 <string>Filename for stats logging summary</string> 7456 <string>Filename for stats logging summary</string>
6939 <key>Persist</key> 7457 <key>Persist</key>
6940 <integer>1</integer> 7458 <integer>1</integer>
6941 <key>Type</key> 7459 <key>Type</key>
6942 <string>String</string> 7460 <string>String</string>
6943 <key>Value</key> 7461 <key>Value</key>
6944 <string>fss.txt</string> 7462 <string>fss.txt</string>
6945 </map> 7463 </map>
6946 <key>StatusBarHeight</key> 7464 <key>StatusBarHeight</key>
6947 <map> 7465 <map>
6948 <key>Comment</key> 7466 <key>Comment</key>
6949 <string>Height of menu/status bar at top of screen (pixels)</string> 7467 <string>Height of menu/status bar at top of screen (pixels)</string>
6950 <key>Persist</key> 7468 <key>Persist</key>
6951 <integer>1</integer> 7469 <integer>1</integer>
6952 <key>Type</key> 7470 <key>Type</key>
6953 <string>S32</string> 7471 <string>S32</string>
6954 <key>Value</key> 7472 <key>Value</key>
6955 <integer>26</integer> 7473 <integer>26</integer>
6956 </map> 7474 </map>
6957 <key>StatusBarPad</key> 7475 <key>StatusBarPad</key>
6958 <map> 7476 <map>
6959 <key>Comment</key> 7477 <key>Comment</key>
6960 <string>Spacing between popup buttons at bottom of screen (Stand up, Release Controls)</string> 7478 <string>Spacing between popup buttons at bottom of screen (Stand up, Release Controls)</string>
6961 <key>Persist</key> 7479 <key>Persist</key>
6962 <integer>1</integer> 7480 <integer>1</integer>
6963 <key>Type</key> 7481 <key>Type</key>
6964 <string>S32</string> 7482 <string>S32</string>
6965 <key>Value</key> 7483 <key>Value</key>
6966 <integer>10</integer> 7484 <integer>10</integer>
6967 </map> 7485 </map>
6968 <key>SystemChatColor</key> 7486 <key>SystemChatColor</key>
6969 <map> 7487 <map>
6970 <key>Comment</key> 7488 <key>Comment</key>
6971 <string>Color of chat messages from SL System</string> 7489 <string>Color of chat messages from SL System</string>
6972 <key>Persist</key> 7490 <key>Persist</key>
6973 <integer>1</integer> 7491 <integer>1</integer>
6974 <key>Type</key> 7492 <key>Type</key>
6975 <string>Color4</string> 7493 <string>Color4</string>
6976 <key>Value</key> 7494 <key>Value</key>
6977 <array> 7495 <array>
6978 <real>0.800000011920928955078125</real> 7496 <real>0.800000011921</real>
6979 <real>1</real> 7497 <real>1.0</real>
6980 <real>1</real> 7498 <real>1.0</real>
6981 <real>1</real> 7499 <real>1.0</real>
6982 </array> 7500 </array>
6983 </map> 7501 </map>
6984 <key>SystemLanguage</key> 7502 <key>SystemLanguage</key>
6985 <map> 7503 <map>
6986 <key>Comment</key> 7504 <key>Comment</key>
6987 <string>Language indicated by system settings (for XUI)</string> 7505 <string>Language indicated by system settings (for XUI)</string>
6988 <key>Persist</key> 7506 <key>Persist</key>
6989 <integer>1</integer> 7507 <integer>1</integer>
6990 <key>Type</key> 7508 <key>Type</key>
6991 <string>String</string> 7509 <string>String</string>
6992 <key>Value</key> 7510 <key>Value</key>
6993 <string>en-us</string> 7511 <string>en-us</string>
6994 </map> 7512 </map>
6995 <key>TabToTextFieldsOnly</key> 7513 <key>TabToTextFieldsOnly</key>
6996 <map> 7514 <map>
6997 <key>Comment</key> 7515 <key>Comment</key>
6998 <string>TAB key takes you to next text entry field, instead of next widget</string> 7516 <string>TAB key takes you to next text entry field, instead of next widget</string>
6999 <key>Persist</key> 7517 <key>Persist</key>
7000 <integer>1</integer> 7518 <integer>1</integer>
7001 <key>Type</key> 7519 <key>Type</key>
7002 <string>Boolean</string> 7520 <string>Boolean</string>
7003 <key>Value</key> 7521 <key>Value</key>
7004 <integer>0</integer> 7522 <integer>0</integer>
7005 </map> 7523 </map>
7006 <key>TerrainColorHeightRange</key> 7524 <key>TerrainColorHeightRange</key>
7007 <map> 7525 <map>
7008 <key>Comment</key> 7526 <key>Comment</key>
7009 <string>Altitude range over which a given terrain texture has effect (meters)</string> 7527 <string>Altitude range over which a given terrain texture has effect (meters)</string>
7010 <key>Persist</key> 7528 <key>Persist</key>
7011 <integer>1</integer> 7529 <integer>1</integer>
7012 <key>Type</key> 7530 <key>Type</key>
7013 <string>F32</string> 7531 <string>F32</string>
7014 <key>Value</key> 7532 <key>Value</key>
7015 <real>60</real> 7533 <real>60.0</real>
7016 </map> 7534 </map>
7017 <key>TerrainColorStartHeight</key> 7535 <key>TerrainColorStartHeight</key>
7018 <map> 7536 <map>
7019 <key>Comment</key> 7537 <key>Comment</key>
7020 <string>Starting altitude for terrain texturing (meters)</string> 7538 <string>Starting altitude for terrain texturing (meters)</string>
7021 <key>Persist</key> 7539 <key>Persist</key>
7022 <integer>1</integer> 7540 <integer>1</integer>
7023 <key>Type</key> 7541 <key>Type</key>
7024 <string>F32</string> 7542 <string>F32</string>
7025 <key>Value</key> 7543 <key>Value</key>
7026 <real>20</real> 7544 <real>20.0</real>
7027 </map> 7545 </map>
7028 <key>TextureMemory</key> 7546 <key>TextureMemory</key>
7029 <map> 7547 <map>
7030 <key>Comment</key> 7548 <key>Comment</key>
7031 <string>Amount of memory to use for textures in MB (0 = autodetect)</string> 7549 <string>Amount of memory to use for textures in MB (0 = autodetect)</string>
7032 <key>Persist</key> 7550 <key>Persist</key>
7033 <integer>1</integer> 7551 <integer>1</integer>
7034 <key>Type</key> 7552 <key>Type</key>
7035 <string>S32</string> 7553 <string>S32</string>
7036 <key>Value</key> 7554 <key>Value</key>
7037 <integer>0</integer> 7555 <integer>0</integer>
7038 </map> 7556 </map>
7039 <key>TexturePickerRect</key> 7557 <key>TexturePickerRect</key>
7040 <map> 7558 <map>
7041 <key>Comment</key> 7559 <key>Comment</key>
7042 <string>Rectangle for texture picker</string> 7560 <string>Rectangle for texture picker</string>
7043 <key>Persist</key> 7561 <key>Persist</key>
7044 <integer>1</integer> 7562 <integer>1</integer>
7045 <key>Type</key> 7563 <key>Type</key>
7046 <string>Rect</string> 7564 <string>Rect</string>
7047 <key>Value</key> 7565 <key>Value</key>
7048 <array> 7566 <array>
7049 <integer>0</integer> 7567 <integer>0</integer>
7050 <integer>290</integer> 7568 <integer>290</integer>
7051 <integer>350</integer> 7569 <integer>350</integer>
7052 <integer>0</integer> 7570 <integer>0</integer>
7053 </array> 7571 </array>
7054 </map> 7572 </map>
7055 <key>TexturePickerShowFolders</key> 7573 <key>TexturePickerShowFolders</key>
7056 <map> 7574 <map>
7057 <key>Comment</key> 7575 <key>Comment</key>
7058 <string>Show folders with no texures in texture picker</string> 7576 <string>Show folders with no texures in texture picker</string>
7059 <key>Persist</key> 7577 <key>Persist</key>
7060 <integer>1</integer> 7578 <integer>1</integer>
7061 <key>Type</key> 7579 <key>Type</key>
7062 <string>Boolean</string> 7580 <string>Boolean</string>
7063 <key>Value</key> 7581 <key>Value</key>
7064 <integer>1</integer> 7582 <integer>1</integer>
7065 </map> 7583 </map>
7066 <key>TexturePickerSortOrder</key> 7584 <key>TexturePickerSortOrder</key>
7067 <map> 7585 <map>
7068 <key>Comment</key> 7586 <key>Comment</key>
7069 <string>Specifies sort key for textures in texture picker (+0 = name, +1 = date, +2 = folders always by name, +4 = system folders to top)</string> 7587 <string>Specifies sort key for textures in texture picker (+0 = name, +1 = date, +2 = folders always by name, +4 = system folders to top)</string>
7070 <key>Persist</key> 7588 <key>Persist</key>
7071 <integer>1</integer> 7589 <integer>1</integer>
7072 <key>Type</key> 7590 <key>Type</key>
7073 <string>U32</string> 7591 <string>U32</string>
7074 <key>Value</key> 7592 <key>Value</key>
7075 <integer>2</integer> 7593 <integer>2</integer>
7076 </map> 7594 </map>
7077 <key>ThirdPersonBtnState</key> 7595 <key>ThirdPersonBtnState</key>
7078 <map> 7596 <map>
7079 <key>Comment</key> 7597 <key>Comment</key>
7080 <string /> 7598 <string />
7081 <key>Persist</key> 7599 <key>Persist</key>
7082 <integer>0</integer> 7600 <integer>0</integer>
7083 <key>Type</key> 7601 <key>Type</key>
7084 <string>Boolean</string> 7602 <string>Boolean</string>
7085 <key>Value</key> 7603 <key>Value</key>
7086 <integer>1</integer> 7604 <integer>1</integer>
7087 </map> 7605 </map>
7088 <key>ThrottleBandwidthKBPS</key> 7606 <key>ThrottleBandwidthKBPS</key>
7089 <map> 7607 <map>
7090 <key>Comment</key> 7608 <key>Comment</key>
7091 <string>Maximum allowable downstream bandwidth (kilo bits per second)</string> 7609 <string>Maximum allowable downstream bandwidth (kilo bits per second)</string>
7092 <key>Persist</key> 7610 <key>Persist</key>
7093 <integer>1</integer> 7611 <integer>1</integer>
7094 <key>Type</key> 7612 <key>Type</key>
7095 <string>F32</string> 7613 <string>F32</string>
7096 <key>Value</key> 7614 <key>Value</key>
7097 <real>500</real> 7615 <real>500.0</real>
7098 </map> 7616 </map>
7099 <key>ToolHelpRect</key> 7617 <key>ToolHelpRect</key>
7100 <map> 7618 <map>
7101 <key>Comment</key> 7619 <key>Comment</key>
7102 <string /> 7620 <string />
7103 <key>Persist</key> 7621 <key>Persist</key>
7104 <integer>0</integer> 7622 <integer>0</integer>
7105 <key>Type</key> 7623 <key>Type</key>
7106 <string>Rect</string> 7624 <string>Rect</string>
7107 <key>Value</key> 7625 <key>Value</key>
7108 <array> 7626 <array>
7109 <integer>8</integer> 7627 <integer>8</integer>
7110 <integer>178</integer> 7628 <integer>178</integer>
7111 <integer>75</integer> 7629 <integer>75</integer>
7112 <integer>162</integer> 7630 <integer>162</integer>
7113 </array> 7631 </array>
7114 </map> 7632 </map>
7115 <key>ToolTipDelay</key> 7633 <key>ToolTipDelay</key>
7116 <map> 7634 <map>
7117 <key>Comment</key> 7635 <key>Comment</key>
7118 <string>Seconds before displaying tooltip when mouse stops over UI element</string> 7636 <string>Seconds before displaying tooltip when mouse stops over UI element</string>
7119 <key>Persist</key> 7637 <key>Persist</key>
7120 <integer>1</integer> 7638 <integer>1</integer>
7121 <key>Type</key> 7639 <key>Type</key>
7122 <string>F32</string> 7640 <string>F32</string>
7123 <key>Value</key> 7641 <key>Value</key>
7124 <real>0.699999988079071044921875</real> 7642 <real>0.699999988079</real>
7125 </map> 7643 </map>
7126 <key>ToolboxAutoMove</key> 7644 <key>ToolboxAutoMove</key>
7127 <map> 7645 <map>
7128 <key>Comment</key> 7646 <key>Comment</key>
7129 <string>[NOT USED]</string> 7647 <string>[NOT USED]</string>
7130 <key>Persist</key> 7648 <key>Persist</key>
7131 <integer>1</integer> 7649 <integer>1</integer>
7132 <key>Type</key> 7650 <key>Type</key>
7133 <string>Boolean</string> 7651 <string>Boolean</string>
7134 <key>Value</key> 7652 <key>Value</key>
7135 <integer>0</integer> 7653 <integer>0</integer>
7136 </map> 7654 </map>
7137 <key>ToolboxRect</key> 7655 <key>ToolboxRect</key>
7138 <map> 7656 <map>
7139 <key>Comment</key> 7657 <key>Comment</key>
7140 <string>Rectangle for tools window</string> 7658 <string>Rectangle for tools window</string>
7141 <key>Persist</key> 7659 <key>Persist</key>
7142 <integer>1</integer> 7660 <integer>1</integer>
7143 <key>Type</key> 7661 <key>Type</key>
7144 <string>Rect</string> 7662 <string>Rect</string>
7145 <key>Value</key> 7663 <key>Value</key>
7146 <array> 7664 <array>
7147 <integer>0</integer> 7665 <integer>0</integer>
7148 <integer>100</integer> 7666 <integer>100</integer>
7149 <integer>100</integer> 7667 <integer>100</integer>
7150 <integer>100</integer> 7668 <integer>100</integer>
7151 </array> 7669 </array>
7152 </map> 7670 </map>
7153 <key>ToolboxShowMore</key> 7671 <key>ToolboxShowMore</key>
7154 <map> 7672 <map>
7155 <key>Comment</key> 7673 <key>Comment</key>
7156 <string>Whether to show additional build tool controls</string> 7674 <string>Whether to show additional build tool controls</string>
7157 <key>Persist</key> 7675 <key>Persist</key>
7158 <integer>1</integer> 7676 <integer>1</integer>
7159 <key>Type</key> 7677 <key>Type</key>
7160 <string>Boolean</string> 7678 <string>Boolean</string>
7161 <key>Value</key> 7679 <key>Value</key>
7162 <integer>1</integer> 7680 <integer>1</integer>
7163 </map> 7681 </map>
7164 <key>TrackFocusObject</key> 7682 <key>TrackFocusObject</key>
7165 <map> 7683 <map>
7166 <key>Comment</key> 7684 <key>Comment</key>
7167 <string>Camera tracks last object zoomed on</string> 7685 <string>Camera tracks last object zoomed on</string>
7168 <key>Persist</key> 7686 <key>Persist</key>
7169 <integer>1</integer> 7687 <integer>1</integer>
7170 <key>Type</key> 7688 <key>Type</key>
7171 <string>Boolean</string> 7689 <string>Boolean</string>
7172 <key>Value</key> 7690 <key>Value</key>
7173 <integer>1</integer> 7691 <integer>1</integer>
7174 </map> 7692 </map>
7175 <key>TurnLeftBtnRect</key> 7693 <key>TurnLeftBtnRect</key>
7176 <map> 7694 <map>
7177 <key>Comment</key> 7695 <key>Comment</key>
7178 <string /> 7696 <string />
7179 <key>Persist</key> 7697 <key>Persist</key>
7180 <integer>0</integer> 7698 <integer>0</integer>
7181 <key>Type</key> 7699 <key>Type</key>
7182 <string>Rect</string> 7700 <string>Rect</string>
7183 <key>Value</key> 7701 <key>Value</key>
7184 <array> 7702 <array>
7185 <integer>20</integer> 7703 <integer>20</integer>
7186 <integer>29</integer> 7704 <integer>29</integer>
7187 <integer>45</integer> 7705 <integer>45</integer>
7188 <integer>4</integer> 7706 <integer>4</integer>
7189 </array> 7707 </array>
7190 </map> 7708 </map>
7191 <key>TurnRightBtnRect</key> 7709 <key>TurnRightBtnRect</key>
7192 <map> 7710 <map>
7193 <key>Comment</key> 7711 <key>Comment</key>
7194 <string /> 7712 <string />
7195 <key>Persist</key> 7713 <key>Persist</key>
7196 <integer>0</integer> 7714 <integer>0</integer>
7197 <key>Type</key> 7715 <key>Type</key>
7198 <string>Rect</string> 7716 <string>Rect</string>
7199 <key>Value</key> 7717 <key>Value</key>
7200 <array> 7718 <array>
7201 <integer>66</integer> 7719 <integer>66</integer>
7202 <integer>29</integer> 7720 <integer>29</integer>
7203 <integer>91</integer> 7721 <integer>91</integer>
7204 <integer>4</integer> 7722 <integer>4</integer>
7205 </array> 7723 </array>
7206 </map> 7724 </map>
7207 <key>TypeAheadTimeout</key> 7725 <key>TypeAheadTimeout</key>
7208 <map> 7726 <map>
7209 <key>Comment</key> 7727 <key>Comment</key>
7210 <string>Time delay before clearing type-ahead buffer in lists (seconds)</string> 7728 <string>Time delay before clearing type-ahead buffer in lists (seconds)</string>
7211 <key>Persist</key> 7729 <key>Persist</key>
7212 <integer>1</integer> 7730 <integer>1</integer>
7213 <key>Type</key> 7731 <key>Type</key>
7214 <string>F32</string> 7732 <string>F32</string>
7215 <key>Value</key> 7733 <key>Value</key>
7216 <real>1.5</real> 7734 <real>1.5</real>
7217 </map> 7735 </map>
7218 <key>UIAutoScale</key> 7736 <key>UIAutoScale</key>
7219 <map> 7737 <map>
7220 <key>Comment</key> 7738 <key>Comment</key>
7221 <string>Keep UI scale consistent across different resolutions</string> 7739 <string>Keep UI scale consistent across different resolutions</string>
7222 <key>Persist</key> 7740 <key>Persist</key>
7223 <integer>1</integer> 7741 <integer>1</integer>
7224 <key>Type</key> 7742 <key>Type</key>
7225 <string>Boolean</string> 7743 <string>Boolean</string>
7226 <key>Value</key> 7744 <key>Value</key>
7227 <integer>1</integer> 7745 <integer>1</integer>
7228 </map> 7746 </map>
7229 <key>UIFloaterTestBool</key> 7747 <key>UIFloaterTestBool</key>
7230 <map> 7748 <map>
7231 <key>Comment</key> 7749 <key>Comment</key>
7232 <string>Example saved setting for the test floater</string> 7750 <string>Example saved setting for the test floater</string>
7233 <key>Persist</key> 7751 <key>Persist</key>
7234 <integer>1</integer> 7752 <integer>1</integer>
7235 <key>Type</key> 7753 <key>Type</key>
7236 <string>Boolean</string> 7754 <string>Boolean</string>
7237 <key>Value</key> 7755 <key>Value</key>
7238 <integer>0</integer> 7756 <integer>0</integer>
7239 </map> 7757 </map>
7240 <key>UIImgBtnCloseActiveUUID</key> 7758 <key>UIImgBtnCloseActiveUUID</key>
7241 <map> 7759 <map>
7242 <key>Comment</key> 7760 <key>Comment</key>
7243 <string /> 7761 <string />
7244 <key>Persist</key> 7762 <key>Persist</key>
7245 <integer>0</integer> 7763 <integer>0</integer>
7246 <key>Type</key> 7764 <key>Type</key>
7247 <string>String</string> 7765 <string>String</string>
7248 <key>Value</key> 7766 <key>Value</key>
7249 <string>47a8c844-cd2a-4b1a-be01-df8b1612fe5d</string> 7767 <string>47a8c844-cd2a-4b1a-be01-df8b1612fe5d</string>
7250 </map> 7768 </map>
7251 <key>UIImgBtnCloseInactiveUUID</key> 7769 <key>UIImgBtnCloseInactiveUUID</key>
7252 <map> 7770 <map>
7253 <key>Comment</key> 7771 <key>Comment</key>
7254 <string /> 7772 <string />
7255 <key>Persist</key> 7773 <key>Persist</key>
7256 <integer>0</integer> 7774 <integer>0</integer>
7257 <key>Type</key> 7775 <key>Type</key>
7258 <string>String</string> 7776 <string>String</string>
7259 <key>Value</key> 7777 <key>Value</key>
7260 <string>779e4fa3-9b13-f74a-fba9-3886fe9c86ba</string> 7778 <string>779e4fa3-9b13-f74a-fba9-3886fe9c86ba</string>
7261 </map> 7779 </map>
7262 <key>UIImgBtnClosePressedUUID</key> 7780 <key>UIImgBtnClosePressedUUID</key>
7263 <map> 7781 <map>
7264 <key>Comment</key> 7782 <key>Comment</key>
7265 <string /> 7783 <string />
7266 <key>Persist</key> 7784 <key>Persist</key>
7267 <integer>0</integer> 7785 <integer>0</integer>
7268 <key>Type</key> 7786 <key>Type</key>
7269 <string>String</string> 7787 <string>String</string>
7270 <key>Value</key> 7788 <key>Value</key>
7271 <string>e5821134-23c0-4bd0-af06-7fa95b9fb01a</string> 7789 <string>e5821134-23c0-4bd0-af06-7fa95b9fb01a</string>
7272 </map> 7790 </map>
7273 <key>UIImgBtnForwardInUUID</key> 7791 <key>UIImgBtnForwardInUUID</key>
7274 <map> 7792 <map>
7275 <key>Comment</key> 7793 <key>Comment</key>
7276 <string /> 7794 <string />
7277 <key>Persist</key> 7795 <key>Persist</key>
7278 <integer>0</integer> 7796 <integer>0</integer>
7279 <key>Type</key> 7797 <key>Type</key>
7280 <string>String</string> 7798 <string>String</string>
7281 <key>Value</key> 7799 <key>Value</key>
7282 <string>54197a61-f5d1-4c29-95d2-c071d08849cb</string> 7800 <string>54197a61-f5d1-4c29-95d2-c071d08849cb</string>
7283 </map> 7801 </map>
7284 <key>UIImgBtnForwardOutUUID</key> 7802 <key>UIImgBtnForwardOutUUID</key>
7285 <map> 7803 <map>
7286 <key>Comment</key> 7804 <key>Comment</key>
7287 <string /> 7805 <string />
7288 <key>Persist</key> 7806 <key>Persist</key>
7289 <integer>0</integer> 7807 <integer>0</integer>
7290 <key>Type</key> 7808 <key>Type</key>
7291 <string>String</string> 7809 <string>String</string>
7292 <key>Value</key> 7810 <key>Value</key>
7293 <string>a0eb4021-1b20-4a53-892d-8faa9265a6f5</string> 7811 <string>a0eb4021-1b20-4a53-892d-8faa9265a6f5</string>
7294 </map> 7812 </map>
7295 <key>UIImgBtnJumpLeftInUUID</key> 7813 <key>UIImgBtnJumpLeftInUUID</key>
7296 <map> 7814 <map>
7297 <key>Comment</key> 7815 <key>Comment</key>
7298 <string /> 7816 <string />
7299 <key>Persist</key> 7817 <key>Persist</key>
7300 <integer>0</integer> 7818 <integer>0</integer>
7301 <key>Type</key> 7819 <key>Type</key>
7302 <string>String</string> 7820 <string>String</string>
7303 <key>Value</key> 7821 <key>Value</key>
7304 <string>9cad3e6d-2d6d-107d-f8ab-5ba272b5bfe1</string> 7822 <string>9cad3e6d-2d6d-107d-f8ab-5ba272b5bfe1</string>
7305 </map> 7823 </map>
7306 <key>UIImgBtnJumpLeftOutUUID</key> 7824 <key>UIImgBtnJumpLeftOutUUID</key>
7307 <map> 7825 <map>
7308 <key>Comment</key> 7826 <key>Comment</key>
7309 <string /> 7827 <string />
7310 <key>Persist</key> 7828 <key>Persist</key>
7311 <integer>0</integer> 7829 <integer>0</integer>
7312 <key>Type</key> 7830 <key>Type</key>
7313 <string>String</string> 7831 <string>String</string>
7314 <key>Value</key> 7832 <key>Value</key>
7315 <string>3c18c87e-5f50-14e2-e744-f44734aa365f</string> 7833 <string>3c18c87e-5f50-14e2-e744-f44734aa365f</string>
7316 </map> 7834 </map>
7317 <key>UIImgBtnJumpRightInUUID</key> 7835 <key>UIImgBtnJumpRightInUUID</key>
7318 <map> 7836 <map>
7319 <key>Comment</key> 7837 <key>Comment</key>
7320 <string /> 7838 <string />
7321 <key>Persist</key> 7839 <key>Persist</key>
7322 <integer>0</integer> 7840 <integer>0</integer>
7323 <key>Type</key> 7841 <key>Type</key>
7324 <string>String</string> 7842 <string>String</string>
7325 <key>Value</key> 7843 <key>Value</key>
7326 <string>7dabc040-ec13-2309-ddf7-4f161f6de2f4</string> 7844 <string>7dabc040-ec13-2309-ddf7-4f161f6de2f4</string>
7327 </map> 7845 </map>
7328 <key>UIImgBtnJumpRightOutUUID</key> 7846 <key>UIImgBtnJumpRightOutUUID</key>
7329 <map> 7847 <map>
7330 <key>Comment</key> 7848 <key>Comment</key>
7331 <string /> 7849 <string />
7332 <key>Persist</key> 7850 <key>Persist</key>
7333 <integer>0</integer> 7851 <integer>0</integer>
7334 <key>Type</key> 7852 <key>Type</key>
7335 <string>String</string> 7853 <string>String</string>
7336 <key>Value</key> 7854 <key>Value</key>
7337 <string>ff9a71eb-7414-4cf8-866e-a701deb7c3cf</string> 7855 <string>ff9a71eb-7414-4cf8-866e-a701deb7c3cf</string>
7338 </map> 7856 </map>
7339 <key>UIImgBtnLeftInUUID</key> 7857 <key>UIImgBtnLeftInUUID</key>
7340 <map> 7858 <map>
7341 <key>Comment</key> 7859 <key>Comment</key>
7342 <string /> 7860 <string />
7343 <key>Persist</key> 7861 <key>Persist</key>
7344 <integer>0</integer> 7862 <integer>0</integer>
7345 <key>Type</key> 7863 <key>Type</key>
7346 <string>String</string> 7864 <string>String</string>
7347 <key>Value</key> 7865 <key>Value</key>
7348 <string>95463c78-aaa6-464d-892d-3a805b6bb7bf</string> 7866 <string>95463c78-aaa6-464d-892d-3a805b6bb7bf</string>
7349 </map> 7867 </map>
7350 <key>UIImgBtnLeftOutUUID</key> 7868 <key>UIImgBtnLeftOutUUID</key>
7351 <map> 7869 <map>
7352 <key>Comment</key> 7870 <key>Comment</key>
7353 <string /> 7871 <string />
7354 <key>Persist</key> 7872 <key>Persist</key>
7355 <integer>0</integer> 7873 <integer>0</integer>
7356 <key>Type</key> 7874 <key>Type</key>
7357 <string>String</string> 7875 <string>String</string>
7358 <key>Value</key> 7876 <key>Value</key>
7359 <string>13a93910-6b44-45eb-ad3a-4d1324c59bac</string> 7877 <string>13a93910-6b44-45eb-ad3a-4d1324c59bac</string>
7360 </map> 7878 </map>
7361 <key>UIImgBtnMinimizeActiveUUID</key> 7879 <key>UIImgBtnMinimizeActiveUUID</key>
7362 <map> 7880 <map>
7363 <key>Comment</key> 7881 <key>Comment</key>
7364 <string /> 7882 <string />
7365 <key>Persist</key> 7883 <key>Persist</key>
7366 <integer>0</integer> 7884 <integer>0</integer>
7367 <key>Type</key> 7885 <key>Type</key>
7368 <string>String</string> 7886 <string>String</string>
7369 <key>Value</key> 7887 <key>Value</key>
7370 <string>34c9398d-bb78-4643-9633-46a2fa3e9637</string> 7888 <string>34c9398d-bb78-4643-9633-46a2fa3e9637</string>
7371 </map> 7889 </map>
7372 <key>UIImgBtnMinimizeInactiveUUID</key> 7890 <key>UIImgBtnMinimizeInactiveUUID</key>
7373 <map> 7891 <map>
7374 <key>Comment</key> 7892 <key>Comment</key>
7375 <string /> 7893 <string />
7376 <key>Persist</key> 7894 <key>Persist</key>
7377 <integer>0</integer> 7895 <integer>0</integer>
7378 <key>Type</key> 7896 <key>Type</key>
7379 <string>String</string> 7897 <string>String</string>
7380 <key>Value</key> 7898 <key>Value</key>
7381 <string>6e72abba-1378-437f-bf7a-f0c15f3e99a3</string> 7899 <string>6e72abba-1378-437f-bf7a-f0c15f3e99a3</string>
7382 </map> 7900 </map>
7383 <key>UIImgBtnMinimizePressedUUID</key> 7901 <key>UIImgBtnMinimizePressedUUID</key>
7384 <map> 7902 <map>
7385 <key>Comment</key> 7903 <key>Comment</key>
7386 <string /> 7904 <string />
7387 <key>Persist</key> 7905 <key>Persist</key>
7388 <integer>0</integer> 7906 <integer>0</integer>
7389 <key>Type</key> 7907 <key>Type</key>
7390 <string>String</string> 7908 <string>String</string>
7391 <key>Value</key> 7909 <key>Value</key>
7392 <string>39801651-26cb-4926-af57-7af9352c273c</string> 7910 <string>39801651-26cb-4926-af57-7af9352c273c</string>
7393 </map> 7911 </map>
7394 <key>UIImgBtnMoveDownInUUID</key> 7912 <key>UIImgBtnMoveDownInUUID</key>
7395 <map> 7913 <map>
7396 <key>Comment</key> 7914 <key>Comment</key>
7397 <string /> 7915 <string />
7398 <key>Persist</key> 7916 <key>Persist</key>
7399 <integer>0</integer> 7917 <integer>0</integer>
7400 <key>Type</key> 7918 <key>Type</key>
7401 <string>String</string> 7919 <string>String</string>
7402 <key>Value</key> 7920 <key>Value</key>
7403 <string>b92a70b9-c841-4c94-b4b3-cee9eb460d48</string> 7921 <string>b92a70b9-c841-4c94-b4b3-cee9eb460d48</string>
7404 </map> 7922 </map>
7405 <key>UIImgBtnMoveDownOutUUID</key> 7923 <key>UIImgBtnMoveDownOutUUID</key>
7406 <map> 7924 <map>
7407 <key>Comment</key> 7925 <key>Comment</key>
7408 <string /> 7926 <string />
7409 <key>Persist</key> 7927 <key>Persist</key>
7410 <integer>0</integer> 7928 <integer>0</integer>
7411 <key>Type</key> 7929 <key>Type</key>
7412 <string>String</string> 7930 <string>String</string>
7413 <key>Value</key> 7931 <key>Value</key>
7414 <string>b5abc9fa-9e62-4e03-bc33-82c4c1b6b689</string> 7932 <string>b5abc9fa-9e62-4e03-bc33-82c4c1b6b689</string>
7415 </map> 7933 </map>
7416 <key>UIImgBtnMoveUpInUUID</key> 7934 <key>UIImgBtnMoveUpInUUID</key>
7417 <map> 7935 <map>
7418 <key>Comment</key> 7936 <key>Comment</key>
7419 <string /> 7937 <string />
7420 <key>Persist</key> 7938 <key>Persist</key>
7421 <integer>0</integer> 7939 <integer>0</integer>
7422 <key>Type</key> 7940 <key>Type</key>
7423 <string>String</string> 7941 <string>String</string>
7424 <key>Value</key> 7942 <key>Value</key>
7425 <string>49b4b357-e430-4b56-b9e0-05b8759c3c82</string> 7943 <string>49b4b357-e430-4b56-b9e0-05b8759c3c82</string>
7426 </map> 7944 </map>
7427 <key>UIImgBtnMoveUpOutUUID</key> 7945 <key>UIImgBtnMoveUpOutUUID</key>
7428 <map> 7946 <map>
7429 <key>Comment</key> 7947 <key>Comment</key>
7430 <string /> 7948 <string />
7431 <key>Persist</key> 7949 <key>Persist</key>
7432 <integer>0</integer> 7950 <integer>0</integer>
7433 <key>Type</key> 7951 <key>Type</key>
7434 <string>String</string> 7952 <string>String</string>
7435 <key>Value</key> 7953 <key>Value</key>
7436 <string>f887146d-829f-4e39-9211-cf872b78f97c</string> 7954 <string>f887146d-829f-4e39-9211-cf872b78f97c</string>
7437 </map> 7955 </map>
7438 <key>UIImgBtnPanDownInUUID</key> 7956 <key>UIImgBtnPanDownInUUID</key>
7439 <map> 7957 <map>
7440 <key>Comment</key> 7958 <key>Comment</key>
7441 <string /> 7959 <string />
7442 <key>Persist</key> 7960 <key>Persist</key>
7443 <integer>0</integer> 7961 <integer>0</integer>
7444 <key>Type</key> 7962 <key>Type</key>
7445 <string>String</string> 7963 <string>String</string>
7446 <key>Value</key> 7964 <key>Value</key>
7447 <string>e5821134-23c0-4bd0-af06-7fa95b9fb01a</string> 7965 <string>e5821134-23c0-4bd0-af06-7fa95b9fb01a</string>
7448 </map> 7966 </map>
7449 <key>UIImgBtnPanDownOutUUID</key> 7967 <key>UIImgBtnPanDownOutUUID</key>
7450 <map> 7968 <map>
7451 <key>Comment</key> 7969 <key>Comment</key>
7452 <string /> 7970 <string />
7453 <key>Persist</key> 7971 <key>Persist</key>
7454 <integer>0</integer> 7972 <integer>0</integer>
7455 <key>Type</key> 7973 <key>Type</key>
7456 <string>String</string> 7974 <string>String</string>
7457 <key>Value</key> 7975 <key>Value</key>
7458 <string>47a8c844-cd2a-4b1a-be01-df8b1612fe5d</string> 7976 <string>47a8c844-cd2a-4b1a-be01-df8b1612fe5d</string>
7459 </map> 7977 </map>
7460 <key>UIImgBtnPanLeftInUUID</key> 7978 <key>UIImgBtnPanLeftInUUID</key>
7461 <map> 7979 <map>
7462 <key>Comment</key> 7980 <key>Comment</key>
7463 <string /> 7981 <string />
7464 <key>Persist</key> 7982 <key>Persist</key>
7465 <integer>0</integer> 7983 <integer>0</integer>
7466 <key>Type</key> 7984 <key>Type</key>
7467 <string>String</string> 7985 <string>String</string>
7468 <key>Value</key> 7986 <key>Value</key>
7469 <string>e5821134-23c0-4bd0-af06-7fa95b9fb01a</string> 7987 <string>e5821134-23c0-4bd0-af06-7fa95b9fb01a</string>
7470 </map> 7988 </map>
7471 <key>UIImgBtnPanLeftOutUUID</key> 7989 <key>UIImgBtnPanLeftOutUUID</key>
7472 <map> 7990 <map>
7473 <key>Comment</key> 7991 <key>Comment</key>
7474 <string /> 7992 <string />
7475 <key>Persist</key> 7993 <key>Persist</key>
7476 <integer>0</integer> 7994 <integer>0</integer>
7477 <key>Type</key> 7995 <key>Type</key>
7478 <string>String</string> 7996 <string>String</string>
7479 <key>Value</key> 7997 <key>Value</key>
7480 <string>47a8c844-cd2a-4b1a-be01-df8b1612fe5d</string> 7998 <string>47a8c844-cd2a-4b1a-be01-df8b1612fe5d</string>
7481 </map> 7999 </map>
7482 <key>UIImgBtnPanRightInUUID</key> 8000 <key>UIImgBtnPanRightInUUID</key>
7483 <map> 8001 <map>
7484 <key>Comment</key> 8002 <key>Comment</key>
7485 <string /> 8003 <string />
7486 <key>Persist</key> 8004 <key>Persist</key>
7487 <integer>0</integer> 8005 <integer>0</integer>
7488 <key>Type</key> 8006 <key>Type</key>
7489 <string>String</string> 8007 <string>String</string>
7490 <key>Value</key> 8008 <key>Value</key>
7491 <string>e5821134-23c0-4bd0-af06-7fa95b9fb01a</string> 8009 <string>e5821134-23c0-4bd0-af06-7fa95b9fb01a</string>
7492 </map> 8010 </map>
7493 <key>UIImgBtnPanRightOutUUID</key> 8011 <key>UIImgBtnPanRightOutUUID</key>
7494 <map> 8012 <map>
7495 <key>Comment</key> 8013 <key>Comment</key>
7496 <string /> 8014 <string />
7497 <key>Persist</key> 8015 <key>Persist</key>
7498 <integer>0</integer> 8016 <integer>0</integer>
7499 <key>Type</key> 8017 <key>Type</key>
7500 <string>String</string> 8018 <string>String</string>
7501 <key>Value</key> 8019 <key>Value</key>
7502 <string>47a8c844-cd2a-4b1a-be01-df8b1612fe5d</string> 8020 <string>47a8c844-cd2a-4b1a-be01-df8b1612fe5d</string>
7503 </map> 8021 </map>
7504 <key>UIImgBtnPanUpInUUID</key> 8022 <key>UIImgBtnPanUpInUUID</key>
7505 <map> 8023 <map>
7506 <key>Comment</key> 8024 <key>Comment</key>
7507 <string /> 8025 <string />
7508 <key>Persist</key> 8026 <key>Persist</key>
7509 <integer>0</integer> 8027 <integer>0</integer>
7510 <key>Type</key> 8028 <key>Type</key>
7511 <string>String</string> 8029 <string>String</string>
7512 <key>Value</key> 8030 <key>Value</key>
7513 <string>e5821134-23c0-4bd0-af06-7fa95b9fb01a</string> 8031 <string>e5821134-23c0-4bd0-af06-7fa95b9fb01a</string>
7514 </map> 8032 </map>
7515 <key>UIImgBtnPanUpOutUUID</key> 8033 <key>UIImgBtnPanUpOutUUID</key>
7516 <map> 8034 <map>
7517 <key>Comment</key> 8035 <key>Comment</key>
7518 <string /> 8036 <string />
7519 <key>Persist</key> 8037 <key>Persist</key>
7520 <integer>0</integer> 8038 <integer>0</integer>
7521 <key>Type</key> 8039 <key>Type</key>
7522 <string>String</string> 8040 <string>String</string>
7523 <key>Value</key> 8041 <key>Value</key>
7524 <string>47a8c844-cd2a-4b1a-be01-df8b1612fe5d</string> 8042 <string>47a8c844-cd2a-4b1a-be01-df8b1612fe5d</string>
7525 </map> 8043 </map>
7526 <key>UIImgBtnRestoreActiveUUID</key> 8044 <key>UIImgBtnRestoreActiveUUID</key>
7527 <map> 8045 <map>
7528 <key>Comment</key> 8046 <key>Comment</key>
7529 <string /> 8047 <string />
7530 <key>Persist</key> 8048 <key>Persist</key>
7531 <integer>0</integer> 8049 <integer>0</integer>
7532 <key>Type</key> 8050 <key>Type</key>
7533 <string>String</string> 8051 <string>String</string>
7534 <key>Value</key> 8052 <key>Value</key>
7535 <string>111b39de-8928-4690-b7b2-e17d5c960277</string> 8053 <string>111b39de-8928-4690-b7b2-e17d5c960277</string>
7536 </map> 8054 </map>
7537 <key>UIImgBtnRestoreInactiveUUID</key> 8055 <key>UIImgBtnRestoreInactiveUUID</key>
7538 <map> 8056 <map>
7539 <key>Comment</key> 8057 <key>Comment</key>
7540 <string /> 8058 <string />
7541 <key>Persist</key> 8059 <key>Persist</key>
7542 <integer>0</integer> 8060 <integer>0</integer>
7543 <key>Type</key> 8061 <key>Type</key>
7544 <string>String</string> 8062 <string>String</string>
7545 <key>Value</key> 8063 <key>Value</key>
7546 <string>0eafa471-70af-4882-b8c1-40a310929744</string> 8064 <string>0eafa471-70af-4882-b8c1-40a310929744</string>
7547 </map> 8065 </map>
7548 <key>UIImgBtnRestorePressedUUID</key> 8066 <key>UIImgBtnRestorePressedUUID</key>
7549 <map> 8067 <map>
7550 <key>Comment</key> 8068 <key>Comment</key>
7551 <string /> 8069 <string />
7552 <key>Persist</key> 8070 <key>Persist</key>
7553 <integer>0</integer> 8071 <integer>0</integer>
7554 <key>Type</key> 8072 <key>Type</key>
7555 <string>String</string> 8073 <string>String</string>
7556 <key>Value</key> 8074 <key>Value</key>
7557 <string>90a0ed5c-2e7b-4845-9958-a64a1b30f312</string> 8075 <string>90a0ed5c-2e7b-4845-9958-a64a1b30f312</string>
7558 </map> 8076 </map>
7559 <key>UIImgBtnRightInUUID</key> 8077 <key>UIImgBtnRightInUUID</key>
7560 <map> 8078 <map>
7561 <key>Comment</key> 8079 <key>Comment</key>
7562 <string /> 8080 <string />
7563 <key>Persist</key> 8081 <key>Persist</key>
7564 <integer>0</integer> 8082 <integer>0</integer>
7565 <key>Type</key> 8083 <key>Type</key>
7566 <string>String</string> 8084 <string>String</string>
7567 <key>Value</key> 8085 <key>Value</key>
7568 <string>5e616d0d-4335-476f-9977-560bccd009da</string> 8086 <string>5e616d0d-4335-476f-9977-560bccd009da</string>
7569 </map> 8087 </map>
7570 <key>UIImgBtnRightOutUUID</key> 8088 <key>UIImgBtnRightOutUUID</key>
7571 <map> 8089 <map>
7572 <key>Comment</key> 8090 <key>Comment</key>
7573 <string /> 8091 <string />
7574 <key>Persist</key> 8092 <key>Persist</key>
7575 <integer>0</integer> 8093 <integer>0</integer>
7576 <key>Type</key> 8094 <key>Type</key>
7577 <string>String</string> 8095 <string>String</string>
7578 <key>Value</key> 8096 <key>Value</key>
7579 <string>5a44fd04-f52b-4c30-8b00-4a31e27614bd</string> 8097 <string>5a44fd04-f52b-4c30-8b00-4a31e27614bd</string>
7580 </map> 8098 </map>
7581 <key>UIImgBtnScrollDownInUUID</key> 8099 <key>UIImgBtnScrollDownInUUID</key>
7582 <map> 8100 <map>
7583 <key>Comment</key> 8101 <key>Comment</key>
7584 <string /> 8102 <string />
7585 <key>Persist</key> 8103 <key>Persist</key>
7586 <integer>0</integer> 8104 <integer>0</integer>
7587 <key>Type</key> 8105 <key>Type</key>
7588 <string>String</string> 8106 <string>String</string>
7589 <key>Value</key> 8107 <key>Value</key>
7590 <string>d2421bab-2eaf-4863-b8f6-5e4c52519247</string> 8108 <string>d2421bab-2eaf-4863-b8f6-5e4c52519247</string>
7591 </map> 8109 </map>
7592 <key>UIImgBtnScrollDownOutUUID</key> 8110 <key>UIImgBtnScrollDownOutUUID</key>
7593 <map> 8111 <map>
7594 <key>Comment</key> 8112 <key>Comment</key>
7595 <string /> 8113 <string />
7596 <key>Persist</key> 8114 <key>Persist</key>
7597 <integer>0</integer> 8115 <integer>0</integer>
7598 <key>Type</key> 8116 <key>Type</key>
7599 <string>String</string> 8117 <string>String</string>
7600 <key>Value</key> 8118 <key>Value</key>
7601 <string>b4ecdecf-5c8d-44e7-b882-17a77e88ed55</string> 8119 <string>b4ecdecf-5c8d-44e7-b882-17a77e88ed55</string>
7602 </map> 8120 </map>
7603 <key>UIImgBtnScrollLeftInUUID</key> 8121 <key>UIImgBtnScrollLeftInUUID</key>
7604 <map> 8122 <map>
7605 <key>Comment</key> 8123 <key>Comment</key>
7606 <string /> 8124 <string />
7607 <key>Persist</key> 8125 <key>Persist</key>
7608 <integer>0</integer> 8126 <integer>0</integer>
7609 <key>Type</key> 8127 <key>Type</key>
7610 <string>String</string> 8128 <string>String</string>
7611 <key>Value</key> 8129 <key>Value</key>
7612 <string>ea137a32-6718-4d05-9c22-7d570d27b2cd</string> 8130 <string>ea137a32-6718-4d05-9c22-7d570d27b2cd</string>
7613 </map> 8131 </map>
7614 <key>UIImgBtnScrollLeftOutUUID</key> 8132 <key>UIImgBtnScrollLeftOutUUID</key>
7615 <map> 8133 <map>
7616 <key>Comment</key> 8134 <key>Comment</key>
7617 <string /> 8135 <string />
7618 <key>Persist</key> 8136 <key>Persist</key>
7619 <integer>0</integer> 8137 <integer>0</integer>
7620 <key>Type</key> 8138 <key>Type</key>
7621 <string>String</string> 8139 <string>String</string>
7622 <key>Value</key> 8140 <key>Value</key>
7623 <string>43773e8d-49aa-48e0-80f3-a04715f4677a</string> 8141 <string>43773e8d-49aa-48e0-80f3-a04715f4677a</string>
7624 </map> 8142 </map>
7625 <key>UIImgBtnScrollRightInUUID</key> 8143 <key>UIImgBtnScrollRightInUUID</key>
7626 <map> 8144 <map>
7627 <key>Comment</key> 8145 <key>Comment</key>
7628 <string /> 8146 <string />
7629 <key>Persist</key> 8147 <key>Persist</key>
7630 <integer>0</integer> 8148 <integer>0</integer>
7631 <key>Type</key> 8149 <key>Type</key>
7632 <string>String</string> 8150 <string>String</string>
7633 <key>Value</key> 8151 <key>Value</key>
7634 <string>b749de64-e903-4c3c-ac0b-25fb6fa39cb5</string> 8152 <string>b749de64-e903-4c3c-ac0b-25fb6fa39cb5</string>
7635 </map> 8153 </map>
7636 <key>UIImgBtnScrollRightOutUUID</key> 8154 <key>UIImgBtnScrollRightOutUUID</key>
7637 <map> 8155 <map>
7638 <key>Comment</key> 8156 <key>Comment</key>
7639 <string /> 8157 <string />
7640 <key>Persist</key> 8158 <key>Persist</key>
7641 <integer>0</integer> 8159 <integer>0</integer>
7642 <key>Type</key> 8160 <key>Type</key>
7643 <string>String</string> 8161 <string>String</string>
7644 <key>Value</key> 8162 <key>Value</key>
7645 <string>3d700d19-e708-465d-87f2-46c8c0ee7938</string> 8163 <string>3d700d19-e708-465d-87f2-46c8c0ee7938</string>
7646 </map> 8164 </map>
7647 <key>UIImgBtnScrollUpInUUID</key> 8165 <key>UIImgBtnScrollUpInUUID</key>
7648 <map> 8166 <map>
7649 <key>Comment</key> 8167 <key>Comment</key>
7650 <string /> 8168 <string />
7651 <key>Persist</key> 8169 <key>Persist</key>
7652 <integer>0</integer> 8170 <integer>0</integer>
7653 <key>Type</key> 8171 <key>Type</key>
7654 <string>String</string> 8172 <string>String</string>
7655 <key>Value</key> 8173 <key>Value</key>
7656 <string>a93abdf3-27b5-4e22-a8fa-c48216cd2e3a</string> 8174 <string>a93abdf3-27b5-4e22-a8fa-c48216cd2e3a</string>
7657 </map> 8175 </map>
7658 <key>UIImgBtnScrollUpOutUUID</key> 8176 <key>UIImgBtnScrollUpOutUUID</key>
7659 <map> 8177 <map>
7660 <key>Comment</key> 8178 <key>Comment</key>
7661 <string /> 8179 <string />
7662 <key>Persist</key> 8180 <key>Persist</key>
7663 <integer>0</integer> 8181 <integer>0</integer>
7664 <key>Type</key> 8182 <key>Type</key>
7665 <string>String</string> 8183 <string>String</string>
7666 <key>Value</key> 8184 <key>Value</key>
7667 <string>dad084d7-9a46-452a-b0ff-4b9f1cefdde9</string> 8185 <string>dad084d7-9a46-452a-b0ff-4b9f1cefdde9</string>
7668 </map> 8186 </map>
7669 <key>UIImgBtnSlideLeftInUUID</key> 8187 <key>UIImgBtnSlideLeftInUUID</key>
7670 <map> 8188 <map>
7671 <key>Comment</key> 8189 <key>Comment</key>
7672 <string /> 8190 <string />
7673 <key>Persist</key> 8191 <key>Persist</key>
7674 <integer>0</integer> 8192 <integer>0</integer>
7675 <key>Type</key> 8193 <key>Type</key>
7676 <string>String</string> 8194 <string>String</string>
7677 <key>Value</key> 8195 <key>Value</key>
7678 <string>724996f5-b956-46f6-9844-4fcfce1d5e83</string> 8196 <string>724996f5-b956-46f6-9844-4fcfce1d5e83</string>
7679 </map> 8197 </map>
7680 <key>UIImgBtnSlideLeftOutUUID</key> 8198 <key>UIImgBtnSlideLeftOutUUID</key>
7681 <map> 8199 <map>
7682 <key>Comment</key> 8200 <key>Comment</key>
7683 <string /> 8201 <string />
7684 <key>Persist</key> 8202 <key>Persist</key>
7685 <integer>0</integer> 8203 <integer>0</integer>
7686 <key>Type</key> 8204 <key>Type</key>
7687 <string>String</string> 8205 <string>String</string>
7688 <key>Value</key> 8206 <key>Value</key>
7689 <string>82476321-0374-4c26-9567-521535ab4cd7</string> 8207 <string>82476321-0374-4c26-9567-521535ab4cd7</string>
7690 </map> 8208 </map>
7691 <key>UIImgBtnSlideRightInUUID</key> 8209 <key>UIImgBtnSlideRightInUUID</key>
7692 <map> 8210 <map>
7693 <key>Comment</key> 8211 <key>Comment</key>
7694 <string /> 8212 <string />
7695 <key>Persist</key> 8213 <key>Persist</key>
7696 <integer>0</integer> 8214 <integer>0</integer>
7697 <key>Type</key> 8215 <key>Type</key>
7698 <string>String</string> 8216 <string>String</string>
7699 <key>Value</key> 8217 <key>Value</key>
7700 <string>7eeb57d2-3f37-454d-a729-8b217b8be443</string> 8218 <string>7eeb57d2-3f37-454d-a729-8b217b8be443</string>
7701 </map> 8219 </map>
7702 <key>UIImgBtnSlideRightOutUUID</key> 8220 <key>UIImgBtnSlideRightOutUUID</key>
7703 <map> 8221 <map>
7704 <key>Comment</key> 8222 <key>Comment</key>
7705 <string /> 8223 <string />
7706 <key>Persist</key> 8224 <key>Persist</key>
7707 <integer>0</integer> 8225 <integer>0</integer>
7708 <key>Type</key> 8226 <key>Type</key>
7709 <string>String</string> 8227 <string>String</string>
7710 <key>Value</key> 8228 <key>Value</key>
7711 <string>1fbe4e60-0607-44d1-a50a-032eff56ae75</string> 8229 <string>1fbe4e60-0607-44d1-a50a-032eff56ae75</string>
7712 </map> 8230 </map>
7713 <key>UIImgBtnSpinDownInUUID</key> 8231 <key>UIImgBtnSpinDownInUUID</key>
7714 <map> 8232 <map>
7715 <key>Comment</key> 8233 <key>Comment</key>
7716 <string /> 8234 <string />
7717 <key>Persist</key> 8235 <key>Persist</key>
7718 <integer>0</integer> 8236 <integer>0</integer>
7719 <key>Type</key> 8237 <key>Type</key>
7720 <string>String</string> 8238 <string>String</string>
7721 <key>Value</key> 8239 <key>Value</key>
7722 <string>a985ac71-052f-48e6-9c33-d931c813ac92</string> 8240 <string>a985ac71-052f-48e6-9c33-d931c813ac92</string>
7723 </map> 8241 </map>
7724 <key>UIImgBtnSpinDownOutUUID</key> 8242 <key>UIImgBtnSpinDownOutUUID</key>
7725 <map> 8243 <map>
7726 <key>Comment</key> 8244 <key>Comment</key>
7727 <string /> 8245 <string />
7728 <key>Persist</key> 8246 <key>Persist</key>
7729 <integer>0</integer> 8247 <integer>0</integer>
7730 <key>Type</key> 8248 <key>Type</key>
7731 <string>String</string> 8249 <string>String</string>
7732 <key>Value</key> 8250 <key>Value</key>
7733 <string>b6d240dd-5602-426f-b606-bbb49a30726d</string> 8251 <string>b6d240dd-5602-426f-b606-bbb49a30726d</string>
7734 </map> 8252 </map>
7735 <key>UIImgBtnSpinUpInUUID</key> 8253 <key>UIImgBtnSpinUpInUUID</key>
7736 <map> 8254 <map>
7737 <key>Comment</key> 8255 <key>Comment</key>
7738 <string /> 8256 <string />
7739 <key>Persist</key> 8257 <key>Persist</key>
7740 <integer>0</integer> 8258 <integer>0</integer>
7741 <key>Type</key> 8259 <key>Type</key>
7742 <string>String</string> 8260 <string>String</string>
7743 <key>Value</key> 8261 <key>Value</key>
7744 <string>c8450082-96a0-4319-8090-d3ff900b4954</string> 8262 <string>c8450082-96a0-4319-8090-d3ff900b4954</string>
7745 </map> 8263 </map>
7746 <key>UIImgBtnSpinUpOutUUID</key> 8264 <key>UIImgBtnSpinUpOutUUID</key>
7747 <map> 8265 <map>
7748 <key>Comment</key> 8266 <key>Comment</key>
7749 <string /> 8267 <string />
7750 <key>Persist</key> 8268 <key>Persist</key>
7751 <integer>0</integer> 8269 <integer>0</integer>
7752 <key>Type</key> 8270 <key>Type</key>
7753 <string>String</string> 8271 <string>String</string>
7754 <key>Value</key> 8272 <key>Value</key>
7755 <string>56576e6e-6710-4e66-89f9-471b59122794</string> 8273 <string>56576e6e-6710-4e66-89f9-471b59122794</string>
7756 </map> 8274 </map>
7757 <key>UIImgBtnTabBottomInUUID</key> 8275 <key>UIImgBtnTabBottomInUUID</key>
7758 <map> 8276 <map>
7759 <key>Comment</key> 8277 <key>Comment</key>
7760 <string /> 8278 <string />
7761 <key>Persist</key> 8279 <key>Persist</key>
7762 <integer>0</integer> 8280 <integer>0</integer>
7763 <key>Type</key> 8281 <key>Type</key>
7764 <string>String</string> 8282 <string>String</string>
7765 <key>Value</key> 8283 <key>Value</key>
7766 <string>c001d8fd-a869-4b6f-86a1-fdcb106df9c7</string> 8284 <string>c001d8fd-a869-4b6f-86a1-fdcb106df9c7</string>
7767 </map> 8285 </map>
7768 <key>UIImgBtnTabBottomOutUUID</key> 8286 <key>UIImgBtnTabBottomOutUUID</key>
7769 <map> 8287 <map>
7770 <key>Comment</key> 8288 <key>Comment</key>
7771 <string /> 8289 <string />
7772 <key>Persist</key> 8290 <key>Persist</key>
7773 <integer>0</integer> 8291 <integer>0</integer>
7774 <key>Type</key> 8292 <key>Type</key>
7775 <string>String</string> 8293 <string>String</string>
7776 <key>Value</key> 8294 <key>Value</key>
7777 <string>bf0a8779-689b-48c3-bb9a-6af546366ef4</string> 8295 <string>bf0a8779-689b-48c3-bb9a-6af546366ef4</string>
7778 </map> 8296 </map>
7779 <key>UIImgBtnTabBottomPartialInUUID</key> 8297 <key>UIImgBtnTabBottomPartialInUUID</key>
7780 <map> 8298 <map>
7781 <key>Comment</key> 8299 <key>Comment</key>
7782 <string /> 8300 <string />
7783 <key>Persist</key> 8301 <key>Persist</key>
7784 <integer>0</integer> 8302 <integer>0</integer>
7785 <key>Type</key> 8303 <key>Type</key>
7786 <string>String</string> 8304 <string>String</string>
7787 <key>Value</key> 8305 <key>Value</key>
7788 <string>eb0b0904-8c91-4f24-b500-1180b91140de</string> 8306 <string>eb0b0904-8c91-4f24-b500-1180b91140de</string>
7789 </map> 8307 </map>
7790 <key>UIImgBtnTabBottomPartialOutUUID</key> 8308 <key>UIImgBtnTabBottomPartialOutUUID</key>
7791 <map> 8309 <map>
7792 <key>Comment</key> 8310 <key>Comment</key>
7793 <string /> 8311 <string />
7794 <key>Persist</key> 8312 <key>Persist</key>
7795 <integer>0</integer> 8313 <integer>0</integer>
7796 <key>Type</key> 8314 <key>Type</key>
7797 <string>String</string> 8315 <string>String</string>
7798 <key>Value</key> 8316 <key>Value</key>
7799 <string>8dca716c-b29c-403a-9886-91c028357d6e</string> 8317 <string>8dca716c-b29c-403a-9886-91c028357d6e</string>
7800 </map> 8318 </map>
7801 <key>UIImgBtnTabTopInUUID</key> 8319 <key>UIImgBtnTabTopInUUID</key>
7802 <map> 8320 <map>
7803 <key>Comment</key> 8321 <key>Comment</key>
7804 <string /> 8322 <string />
7805 <key>Persist</key> 8323 <key>Persist</key>
7806 <integer>0</integer> 8324 <integer>0</integer>
7807 <key>Type</key> 8325 <key>Type</key>
7808 <string>String</string> 8326 <string>String</string>
7809 <key>Value</key> 8327 <key>Value</key>
7810 <string>16d032e8-817b-4368-8a4e-b7b947ae3889</string> 8328 <string>16d032e8-817b-4368-8a4e-b7b947ae3889</string>
7811 </map> 8329 </map>
7812 <key>UIImgBtnTabTopOutUUID</key> 8330 <key>UIImgBtnTabTopOutUUID</key>
7813 <map> 8331 <map>
7814 <key>Comment</key> 8332 <key>Comment</key>
7815 <string /> 8333 <string />
7816 <key>Persist</key> 8334 <key>Persist</key>
7817 <integer>0</integer> 8335 <integer>0</integer>
7818 <key>Type</key> 8336 <key>Type</key>
7819 <string>String</string> 8337 <string>String</string>
7820 <key>Value</key> 8338 <key>Value</key>
7821 <string>1ed83f57-41cf-4052-a3b4-2e8bb78d8191</string> 8339 <string>1ed83f57-41cf-4052-a3b4-2e8bb78d8191</string>
7822 </map> 8340 </map>
7823 <key>UIImgBtnTabTopPartialInUUID</key> 8341 <key>UIImgBtnTabTopPartialInUUID</key>
7824 <map> 8342 <map>
7825 <key>Comment</key> 8343 <key>Comment</key>
7826 <string /> 8344 <string />
7827 <key>Persist</key> 8345 <key>Persist</key>
7828 <integer>0</integer> 8346 <integer>0</integer>
7829 <key>Type</key> 8347 <key>Type</key>
7830 <string>String</string> 8348 <string>String</string>
7831 <key>Value</key> 8349 <key>Value</key>
7832 <string>7c6c6c26-0e25-4438-89bd-30d8b8e9d704</string> 8350 <string>7c6c6c26-0e25-4438-89bd-30d8b8e9d704</string>
7833 </map> 8351 </map>
7834 <key>UIImgBtnTabTopPartialOutUUID</key> 8352 <key>UIImgBtnTabTopPartialOutUUID</key>
7835 <map> 8353 <map>
7836 <key>Comment</key> 8354 <key>Comment</key>
7837 <string /> 8355 <string />
7838 <key>Persist</key> 8356 <key>Persist</key>
7839 <integer>0</integer> 8357 <integer>0</integer>
7840 <key>Type</key> 8358 <key>Type</key>
7841 <string>String</string> 8359 <string>String</string>
7842 <key>Value</key> 8360 <key>Value</key>
7843 <string>932ad585-0e45-4a57-aa23-4cf81beeb7b0</string> 8361 <string>932ad585-0e45-4a57-aa23-4cf81beeb7b0</string>
7844 </map> 8362 </map>
7845 <key>UIImgBtnTearOffActiveUUID</key> 8363 <key>UIImgBtnTearOffActiveUUID</key>
7846 <map> 8364 <map>
7847 <key>Comment</key> 8365 <key>Comment</key>
7848 <string /> 8366 <string />
7849 <key>Persist</key> 8367 <key>Persist</key>
7850 <integer>0</integer> 8368 <integer>0</integer>
7851 <key>Type</key> 8369 <key>Type</key>
7852 <string>String</string> 8370 <string>String</string>
7853 <key>Value</key> 8371 <key>Value</key>
7854 <string>74e1a96f-4833-a24d-a1bb-1bce1468b0e7</string> 8372 <string>74e1a96f-4833-a24d-a1bb-1bce1468b0e7</string>
7855 </map> 8373 </map>
7856 <key>UIImgBtnTearOffInactiveUUID</key> 8374 <key>UIImgBtnTearOffInactiveUUID</key>
7857 <map> 8375 <map>
7858 <key>Comment</key> 8376 <key>Comment</key>
7859 <string /> 8377 <string />
7860 <key>Persist</key> 8378 <key>Persist</key>
7861 <integer>0</integer> 8379 <integer>0</integer>
7862 <key>Type</key> 8380 <key>Type</key>
7863 <string>String</string> 8381 <string>String</string>
7864 <key>Value</key> 8382 <key>Value</key>
7865 <string>74e1a96f-4833-a24d-a1bb-1bce1468b0e7</string> 8383 <string>74e1a96f-4833-a24d-a1bb-1bce1468b0e7</string>
7866 </map> 8384 </map>
7867 <key>UIImgBtnTearOffPressedUUID</key> 8385 <key>UIImgBtnTearOffPressedUUID</key>
7868 <map> 8386 <map>
7869 <key>Comment</key> 8387 <key>Comment</key>
7870 <string /> 8388 <string />
7871 <key>Persist</key> 8389 <key>Persist</key>
7872 <integer>0</integer> 8390 <integer>0</integer>
7873 <key>Type</key> 8391 <key>Type</key>
7874 <string>String</string> 8392 <string>String</string>
7875 <key>Value</key> 8393 <key>Value</key>
7876 <string>d2524c13-4ba6-af7c-e305-8ac6cc18d86a</string> 8394 <string>d2524c13-4ba6-af7c-e305-8ac6cc18d86a</string>
7877 </map> 8395 </map>
7878 <key>UIImgCheckboxActiveSelectedUUID</key> 8396 <key>UIImgCheckboxActiveSelectedUUID</key>
7879 <map> 8397 <map>
7880 <key>Comment</key> 8398 <key>Comment</key>
7881 <string /> 8399 <string />
7882 <key>Persist</key> 8400 <key>Persist</key>
7883 <integer>0</integer> 8401 <integer>0</integer>
7884 <key>Type</key> 8402 <key>Type</key>
7885 <string>String</string> 8403 <string>String</string>
7886 <key>Value</key> 8404 <key>Value</key>
7887 <string>cf4a2ed7-1533-4686-9dde-df9a37ddca55</string> 8405 <string>cf4a2ed7-1533-4686-9dde-df9a37ddca55</string>
7888 </map> 8406 </map>
7889 <key>UIImgCheckboxActiveUUID</key> 8407 <key>UIImgCheckboxActiveUUID</key>
7890 <map> 8408 <map>
7891 <key>Comment</key> 8409 <key>Comment</key>
7892 <string /> 8410 <string />
7893 <key>Persist</key> 8411 <key>Persist</key>
7894 <integer>0</integer> 8412 <integer>0</integer>
7895 <key>Type</key> 8413 <key>Type</key>
7896 <string>String</string> 8414 <string>String</string>
7897 <key>Value</key> 8415 <key>Value</key>
7898 <string>05bb64ee-96fd-4243-b74e-f40a41bc53ba</string> 8416 <string>05bb64ee-96fd-4243-b74e-f40a41bc53ba</string>
7899 </map> 8417 </map>
7900 <key>UIImgCheckboxInactiveSelectedUUID</key> 8418 <key>UIImgCheckboxInactiveSelectedUUID</key>
7901 <map> 8419 <map>
7902 <key>Comment</key> 8420 <key>Comment</key>
7903 <string /> 8421 <string />
7904 <key>Persist</key> 8422 <key>Persist</key>
7905 <integer>0</integer> 8423 <integer>0</integer>
7906 <key>Type</key> 8424 <key>Type</key>
7907 <string>String</string> 8425 <string>String</string>
7908 <key>Value</key> 8426 <key>Value</key>
7909 <string>c817c642-9abd-4236-9287-ae0513fe7d2b</string> 8427 <string>c817c642-9abd-4236-9287-ae0513fe7d2b</string>
7910 </map> 8428 </map>
7911 <key>UIImgCheckboxInactiveUUID</key> 8429 <key>UIImgCheckboxInactiveUUID</key>
7912 <map> 8430 <map>
7913 <key>Comment</key> 8431 <key>Comment</key>
7914 <string /> 8432 <string />
7915 <key>Persist</key> 8433 <key>Persist</key>
7916 <integer>0</integer> 8434 <integer>0</integer>
7917 <key>Type</key> 8435 <key>Type</key>
7918 <string>String</string> 8436 <string>String</string>
7919 <key>Value</key> 8437 <key>Value</key>
7920 <string>7d94cb59-32a2-49bf-a516-9e5a2045f9d9</string> 8438 <string>7d94cb59-32a2-49bf-a516-9e5a2045f9d9</string>
7921 </map> 8439 </map>
7922 <key>UIImgCreateSelectedUUID</key> 8440 <key>UIImgCreateSelectedUUID</key>
7923 <map> 8441 <map>
7924 <key>Comment</key> 8442 <key>Comment</key>
7925 <string /> 8443 <string />
7926 <key>Persist</key> 8444 <key>Persist</key>
7927 <integer>0</integer> 8445 <integer>0</integer>
7928 <key>Type</key> 8446 <key>Type</key>
7929 <string>String</string> 8447 <string>String</string>
7930 <key>Value</key> 8448 <key>Value</key>
7931 <string>0098b015-3daf-4cfe-a72f-915369ea97c2</string> 8449 <string>0098b015-3daf-4cfe-a72f-915369ea97c2</string>
7932 </map> 8450 </map>
7933 <key>UIImgCreateUUID</key> 8451 <key>UIImgCreateUUID</key>
7934 <map> 8452 <map>
7935 <key>Comment</key> 8453 <key>Comment</key>
7936 <string /> 8454 <string />
7937 <key>Persist</key> 8455 <key>Persist</key>
7938 <integer>0</integer> 8456 <integer>0</integer>
7939 <key>Type</key> 8457 <key>Type</key>
7940 <string>String</string> 8458 <string>String</string>
7941 <key>Value</key> 8459 <key>Value</key>
7942 <string>7a0b1bdb-b5d9-4df5-bac2-ba230da93b5b</string> 8460 <string>7a0b1bdb-b5d9-4df5-bac2-ba230da93b5b</string>
7943 </map> 8461 </map>
7944 <key>UIImgCrosshairsUUID</key> 8462 <key>UIImgCrosshairsUUID</key>
7945 <map> 8463 <map>
7946 <key>Comment</key> 8464 <key>Comment</key>
7947 <string>Image to use for crosshair display (UUID texture reference)</string> 8465 <string>Image to use for crosshair display (UUID texture reference)</string>
7948 <key>Persist</key> 8466 <key>Persist</key>
7949 <integer>1</integer> 8467 <integer>1</integer>
7950 <key>Type</key> 8468 <key>Type</key>
7951 <string>String</string> 8469 <string>String</string>
7952 <key>Value</key> 8470 <key>Value</key>
7953 <string>6e1a3980-bf2d-4274-8970-91e60d85fb52</string> 8471 <string>6e1a3980-bf2d-4274-8970-91e60d85fb52</string>
7954 </map> 8472 </map>
7955 <key>UIImgDefaultEyesUUID</key> 8473 <key>UIImgDefaultEyesUUID</key>
7956 <map> 8474 <map>
7957 <key>Comment</key> 8475 <key>Comment</key>
7958 <string /> 8476 <string />
7959 <key>Persist</key> 8477 <key>Persist</key>
7960 <integer>0</integer> 8478 <integer>0</integer>
7961 <key>Type</key> 8479 <key>Type</key>
7962 <string>String</string> 8480 <string>String</string>
7963 <key>Value</key> 8481 <key>Value</key>
7964 <string>6522e74d-1660-4e7f-b601-6f48c1659a77</string> 8482 <string>6522e74d-1660-4e7f-b601-6f48c1659a77</string>
7965 </map> 8483 </map>
7966 <key>UIImgDefaultGlovesUUID</key> 8484 <key>UIImgDefaultGlovesUUID</key>
7967 <map> 8485 <map>
7968 <key>Comment</key> 8486 <key>Comment</key>
7969 <string /> 8487 <string />
7970 <key>Persist</key> 8488 <key>Persist</key>
7971 <integer>0</integer> 8489 <integer>0</integer>
7972 <key>Type</key> 8490 <key>Type</key>
7973 <string>String</string> 8491 <string>String</string>
7974 <key>Value</key> 8492 <key>Value</key>
7975 <string>5748decc-f629-461c-9a36-a35a221fe21f</string> 8493 <string>5748decc-f629-461c-9a36-a35a221fe21f</string>
7976 </map> 8494 </map>
7977 <key>UIImgDefaultHairUUID</key> 8495 <key>UIImgDefaultHairUUID</key>
7978 <map> 8496 <map>
7979 <key>Comment</key> 8497 <key>Comment</key>
7980 <string /> 8498 <string />
7981 <key>Persist</key> 8499 <key>Persist</key>
7982 <integer>0</integer> 8500 <integer>0</integer>
7983 <key>Type</key> 8501 <key>Type</key>
7984 <string>String</string> 8502 <string>String</string>
7985 <key>Value</key> 8503 <key>Value</key>
7986 <string>7ca39b4c-bd19-4699-aff7-f93fd03d3e7b</string> 8504 <string>7ca39b4c-bd19-4699-aff7-f93fd03d3e7b</string>
7987 </map> 8505 </map>
7988 <key>UIImgDefaultJacketUUID</key> 8506 <key>UIImgDefaultJacketUUID</key>
7989 <map> 8507 <map>
7990 <key>Comment</key> 8508 <key>Comment</key>
7991 <string /> 8509 <string />
7992 <key>Persist</key> 8510 <key>Persist</key>
7993 <integer>0</integer> 8511 <integer>0</integer>
7994 <key>Type</key> 8512 <key>Type</key>
7995 <string>String</string> 8513 <string>String</string>
7996 <key>Value</key> 8514 <key>Value</key>
7997 <string>5748decc-f629-461c-9a36-a35a221fe21f</string> 8515 <string>5748decc-f629-461c-9a36-a35a221fe21f</string>
7998 </map> 8516 </map>
7999 <key>UIImgDefaultPantsUUID</key> 8517 <key>UIImgDefaultPantsUUID</key>
8000 <map> 8518 <map>
8001 <key>Comment</key> 8519 <key>Comment</key>
8002 <string /> 8520 <string />
8003 <key>Persist</key> 8521 <key>Persist</key>
8004 <integer>0</integer> 8522 <integer>0</integer>
8005 <key>Type</key> 8523 <key>Type</key>
8006 <string>String</string> 8524 <string>String</string>
8007 <key>Value</key> 8525 <key>Value</key>
8008 <string>5748decc-f629-461c-9a36-a35a221fe21f</string> 8526 <string>5748decc-f629-461c-9a36-a35a221fe21f</string>
8009 </map> 8527 </map>
8010 <key>UIImgDefaultShirtUUID</key> 8528 <key>UIImgDefaultShirtUUID</key>
8011 <map> 8529 <map>
8012 <key>Comment</key> 8530 <key>Comment</key>
8013 <string /> 8531 <string />
8014 <key>Persist</key> 8532 <key>Persist</key>
8015 <integer>0</integer> 8533 <integer>0</integer>
8016 <key>Type</key> 8534 <key>Type</key>
8017 <string>String</string> 8535 <string>String</string>
8018 <key>Value</key> 8536 <key>Value</key>
8019 <string>5748decc-f629-461c-9a36-a35a221fe21f</string> 8537 <string>5748decc-f629-461c-9a36-a35a221fe21f</string>
8020 </map> 8538 </map>
8021 <key>UIImgDefaultShoesUUID</key> 8539 <key>UIImgDefaultShoesUUID</key>
8022 <map> 8540 <map>
8023 <key>Comment</key> 8541 <key>Comment</key>
8024 <string /> 8542 <string />
8025 <key>Persist</key> 8543 <key>Persist</key>
8026 <integer>0</integer> 8544 <integer>0</integer>
8027 <key>Type</key> 8545 <key>Type</key>
8028 <string>String</string> 8546 <string>String</string>
8029 <key>Value</key> 8547 <key>Value</key>
8030 <string>5748decc-f629-461c-9a36-a35a221fe21f</string> 8548 <string>5748decc-f629-461c-9a36-a35a221fe21f</string>
8031 </map> 8549 </map>
8032 <key>UIImgDefaultSkirtUUID</key> 8550 <key>UIImgDefaultSkirtUUID</key>
8033 <map> 8551 <map>
8034 <key>Comment</key> 8552 <key>Comment</key>
8035 <string /> 8553 <string />
8036 <key>Persist</key> 8554 <key>Persist</key>
8037 <integer>0</integer> 8555 <integer>0</integer>
8038 <key>Type</key> 8556 <key>Type</key>
8039 <string>String</string> 8557 <string>String</string>
8040 <key>Value</key> 8558 <key>Value</key>
8041 <string>5748decc-f629-461c-9a36-a35a221fe21f</string> 8559 <string>5748decc-f629-461c-9a36-a35a221fe21f</string>
8042 </map> 8560 </map>
8043 <key>UIImgDefaultSocksUUID</key> 8561 <key>UIImgDefaultSocksUUID</key>
8044 <map> 8562 <map>
8045 <key>Comment</key> 8563 <key>Comment</key>
8046 <string /> 8564 <string />
8047 <key>Persist</key> 8565 <key>Persist</key>
8048 <integer>0</integer> 8566 <integer>0</integer>
8049 <key>Type</key> 8567 <key>Type</key>
8050 <string>String</string> 8568 <string>String</string>
8051 <key>Value</key> 8569 <key>Value</key>
8052 <string>5748decc-f629-461c-9a36-a35a221fe21f</string> 8570 <string>5748decc-f629-461c-9a36-a35a221fe21f</string>
8053 </map> 8571 </map>
8054 <key>UIImgDefaultUnderwearUUID</key> 8572 <key>UIImgDefaultUnderwearUUID</key>
8055 <map> 8573 <map>
8056 <key>Comment</key> 8574 <key>Comment</key>
8057 <string /> 8575 <string />
8058 <key>Persist</key> 8576 <key>Persist</key>
8059 <integer>0</integer> 8577 <integer>0</integer>
8060 <key>Type</key> 8578 <key>Type</key>
8061 <string>String</string> 8579 <string>String</string>
8062 <key>Value</key> 8580 <key>Value</key>
8063 <string>5748decc-f629-461c-9a36-a35a221fe21f</string> 8581 <string>5748decc-f629-461c-9a36-a35a221fe21f</string>
8064 </map> 8582 </map>
8065 <key>UIImgDirectionArrowUUID</key> 8583 <key>UIImgDirectionArrowUUID</key>
8066 <map> 8584 <map>
8067 <key>Comment</key> 8585 <key>Comment</key>
8068 <string /> 8586 <string />
8069 <key>Persist</key> 8587 <key>Persist</key>
8070 <integer>0</integer> 8588 <integer>0</integer>
8071 <key>Type</key> 8589 <key>Type</key>
8072 <string>String</string> 8590 <string>String</string>
8073 <key>Value</key> 8591 <key>Value</key>
8074 <string>586383e8-4d9b-4fba-9196-2b5938e79c2c</string> 8592 <string>586383e8-4d9b-4fba-9196-2b5938e79c2c</string>
8075 </map> 8593 </map>
8076 <key>UIImgFaceSelectedUUID</key> 8594 <key>UIImgFaceSelectedUUID</key>
8077 <map> 8595 <map>
8078 <key>Comment</key> 8596 <key>Comment</key>
8079 <string /> 8597 <string />
8080 <key>Persist</key> 8598 <key>Persist</key>
8081 <integer>0</integer> 8599 <integer>0</integer>
8082 <key>Type</key> 8600 <key>Type</key>
8083 <string>String</string> 8601 <string>String</string>
8084 <key>Value</key> 8602 <key>Value</key>
8085 <string>b4870163-6208-42a9-9801-93133bf9a6cd</string> 8603 <string>b4870163-6208-42a9-9801-93133bf9a6cd</string>
8086 </map> 8604 </map>
8087 <key>UIImgFaceUUID</key> 8605 <key>UIImgFaceUUID</key>
8088 <map> 8606 <map>
8089 <key>Comment</key> 8607 <key>Comment</key>
8090 <string /> 8608 <string />
8091 <key>Persist</key> 8609 <key>Persist</key>
8092 <integer>0</integer> 8610 <integer>0</integer>
8093 <key>Type</key> 8611 <key>Type</key>
8094 <string>String</string> 8612 <string>String</string>
8095 <key>Value</key> 8613 <key>Value</key>
8096 <string>ce15fd63-b0b6-463c-a37d-ea6393208b3e</string> 8614 <string>ce15fd63-b0b6-463c-a37d-ea6393208b3e</string>
8097 </map> 8615 </map>
8098 <key>UIImgFocusSelectedUUID</key> 8616 <key>UIImgFocusSelectedUUID</key>
8099 <map> 8617 <map>
8100 <key>Comment</key> 8618 <key>Comment</key>
8101 <string /> 8619 <string />
8102 <key>Persist</key> 8620 <key>Persist</key>
8103 <integer>0</integer> 8621 <integer>0</integer>
8104 <key>Type</key> 8622 <key>Type</key>
8105 <string>String</string> 8623 <string>String</string>
8106 <key>Value</key> 8624 <key>Value</key>
8107 <string>ab6a730e-ddfd-4982-9a32-c6de3de6d31d</string> 8625 <string>ab6a730e-ddfd-4982-9a32-c6de3de6d31d</string>
8108 </map> 8626 </map>
8109 <key>UIImgFocusUUID</key> 8627 <key>UIImgFocusUUID</key>
8110 <map> 8628 <map>
8111 <key>Comment</key> 8629 <key>Comment</key>
8112 <string /> 8630 <string />
8113 <key>Persist</key> 8631 <key>Persist</key>
8114 <integer>0</integer> 8632 <integer>0</integer>
8115 <key>Type</key> 8633 <key>Type</key>
8116 <string>String</string> 8634 <string>String</string>
8117 <key>Value</key> 8635 <key>Value</key>
8118 <string>57bc39d1-288c-4519-aea6-6d1786a5c274</string> 8636 <string>57bc39d1-288c-4519-aea6-6d1786a5c274</string>
8119 </map> 8637 </map>
8120 <key>UIImgGrabSelectedUUID</key> 8638 <key>UIImgGrabSelectedUUID</key>
8121 <map> 8639 <map>
8122 <key>Comment</key> 8640 <key>Comment</key>
8123 <string /> 8641 <string />
8124 <key>Persist</key> 8642 <key>Persist</key>
8125 <integer>0</integer> 8643 <integer>0</integer>
8126 <key>Type</key> 8644 <key>Type</key>
8127 <string>String</string> 8645 <string>String</string>
8128 <key>Value</key> 8646 <key>Value</key>
8129 <string>c1e21504-f136-451d-b8e9-929037812f1d</string> 8647 <string>c1e21504-f136-451d-b8e9-929037812f1d</string>
8130 </map> 8648 </map>
8131 <key>UIImgGrabUUID</key> 8649 <key>UIImgGrabUUID</key>
8132 <map> 8650 <map>
8133 <key>Comment</key> 8651 <key>Comment</key>
8134 <string /> 8652 <string />
8135 <key>Persist</key> 8653 <key>Persist</key>
8136 <integer>0</integer> 8654 <integer>0</integer>
8137 <key>Type</key> 8655 <key>Type</key>
8138 <string>String</string> 8656 <string>String</string>
8139 <key>Value</key> 8657 <key>Value</key>
8140 <string>c63f124c-6340-4fbf-b59e-0869a44adb64</string> 8658 <string>c63f124c-6340-4fbf-b59e-0869a44adb64</string>
8141 </map> 8659 </map>
8142 <key>UIImgMoveSelectedUUID</key> 8660 <key>UIImgMoveSelectedUUID</key>
8143 <map> 8661 <map>
8144 <key>Comment</key> 8662 <key>Comment</key>
8145 <string /> 8663 <string />
8146 <key>Persist</key> 8664 <key>Persist</key>
8147 <integer>0</integer> 8665 <integer>0</integer>
8148 <key>Type</key> 8666 <key>Type</key>
8149 <string>String</string> 8667 <string>String</string>
8150 <key>Value</key> 8668 <key>Value</key>
8151 <string>46f17c7b-8381-48c3-b628-6a406e060dd6</string> 8669 <string>46f17c7b-8381-48c3-b628-6a406e060dd6</string>
8152 </map> 8670 </map>
8153 <key>UIImgMoveUUID</key> 8671 <key>UIImgMoveUUID</key>
8154 <map> 8672 <map>
8155 <key>Comment</key> 8673 <key>Comment</key>
8156 <string /> 8674 <string />
8157 <key>Persist</key> 8675 <key>Persist</key>
8158 <integer>0</integer> 8676 <integer>0</integer>
8159 <key>Type</key> 8677 <key>Type</key>
8160 <string>String</string> 8678 <string>String</string>
8161 <key>Value</key> 8679 <key>Value</key>
8162 <string>2fa5dc06-bcdd-4e09-a426-f9f262d4fa65</string> 8680 <string>2fa5dc06-bcdd-4e09-a426-f9f262d4fa65</string>
8163 </map> 8681 </map>
8164 <key>UIImgRadioActiveSelectedUUID</key> 8682 <key>UIImgRadioActiveSelectedUUID</key>
8165 <map> 8683 <map>
8166 <key>Comment</key> 8684 <key>Comment</key>
8167 <string /> 8685 <string />
8168 <key>Persist</key> 8686 <key>Persist</key>
8169 <integer>0</integer> 8687 <integer>0</integer>
8170 <key>Type</key> 8688 <key>Type</key>
8171 <string>String</string> 8689 <string>String</string>
8172 <key>Value</key> 8690 <key>Value</key>
8173 <string>52f09e07-5816-4052-953c-94c6c10479b7</string> 8691 <string>52f09e07-5816-4052-953c-94c6c10479b7</string>
8174 </map> 8692 </map>
8175 <key>UIImgRadioActiveUUID</key> 8693 <key>UIImgRadioActiveUUID</key>
8176 <map> 8694 <map>
8177 <key>Comment</key> 8695 <key>Comment</key>
8178 <string /> 8696 <string />
8179 <key>Persist</key> 8697 <key>Persist</key>
8180 <integer>0</integer> 8698 <integer>0</integer>
8181 <key>Type</key> 8699 <key>Type</key>
8182 <string>String</string> 8700 <string>String</string>
8183 <key>Value</key> 8701 <key>Value</key>
8184 <string>7a1ba9b8-1047-4d1e-9cfc-bc478c80b63f</string> 8702 <string>7a1ba9b8-1047-4d1e-9cfc-bc478c80b63f</string>
8185 </map> 8703 </map>
8186 <key>UIImgRadioInactiveSelectedUUID</key> 8704 <key>UIImgRadioInactiveSelectedUUID</key>
8187 <map> 8705 <map>
8188 <key>Comment</key> 8706 <key>Comment</key>
8189 <string /> 8707 <string />
8190 <key>Persist</key> 8708 <key>Persist</key>
8191 <integer>0</integer> 8709 <integer>0</integer>
8192 <key>Type</key> 8710 <key>Type</key>
8193 <string>String</string> 8711 <string>String</string>
8194 <key>Value</key> 8712 <key>Value</key>
8195 <string>1975db39-aa29-4251-aea0-409ac09d414d</string> 8713 <string>1975db39-aa29-4251-aea0-409ac09d414d</string>
8196 </map> 8714 </map>
8197 <key>UIImgRadioInactiveUUID</key> 8715 <key>UIImgRadioInactiveUUID</key>
8198 <map> 8716 <map>
8199 <key>Comment</key> 8717 <key>Comment</key>
8200 <string /> 8718 <string />
8201 <key>Persist</key> 8719 <key>Persist</key>
8202 <integer>0</integer> 8720 <integer>0</integer>
8203 <key>Type</key> 8721 <key>Type</key>
8204 <string>String</string> 8722 <string>String</string>
8205 <key>Value</key> 8723 <key>Value</key>
8206 <string>90688481-67ff-4af0-be69-4aa084bcad1e</string> 8724 <string>90688481-67ff-4af0-be69-4aa084bcad1e</string>
8207 </map> 8725 </map>
8208 <key>UIImgResizeBottomRightUUID</key> 8726 <key>UIImgResizeBottomRightUUID</key>
8209 <map> 8727 <map>
8210 <key>Comment</key> 8728 <key>Comment</key>
8211 <string /> 8729 <string />
8212 <key>Persist</key> 8730 <key>Persist</key>
8213 <integer>0</integer> 8731 <integer>0</integer>
8214 <key>Type</key> 8732 <key>Type</key>
8215 <string>String</string> 8733 <string>String</string>
8216 <key>Value</key> 8734 <key>Value</key>
8217 <string>e3690e25-9690-4f6c-a745-e7dcd885285a</string> 8735 <string>e3690e25-9690-4f6c-a745-e7dcd885285a</string>
8218 </map> 8736 </map>
8219 <key>UIImgRotateSelectedUUID</key> 8737 <key>UIImgRotateSelectedUUID</key>
8220 <map> 8738 <map>
8221 <key>Comment</key> 8739 <key>Comment</key>
8222 <string /> 8740 <string />
8223 <key>Persist</key> 8741 <key>Persist</key>
8224 <integer>0</integer> 8742 <integer>0</integer>
8225 <key>Type</key> 8743 <key>Type</key>
8226 <string>String</string> 8744 <string>String</string>
8227 <key>Value</key> 8745 <key>Value</key>
8228 <string>cdfb7fde-0d13-418a-9d89-2bd91019fc95</string> 8746 <string>cdfb7fde-0d13-418a-9d89-2bd91019fc95</string>
8229 </map> 8747 </map>
8230 <key>UIImgRotateUUID</key> 8748 <key>UIImgRotateUUID</key>
8231 <map> 8749 <map>
8232 <key>Comment</key> 8750 <key>Comment</key>
8233 <string /> 8751 <string />
8234 <key>Persist</key> 8752 <key>Persist</key>
8235 <integer>0</integer> 8753 <integer>0</integer>
8236 <key>Type</key> 8754 <key>Type</key>
8237 <string>String</string> 8755 <string>String</string>
8238 <key>Value</key> 8756 <key>Value</key>
8239 <string>c34b1eaa-aae3-4351-b082-e26c0b636779</string> 8757 <string>c34b1eaa-aae3-4351-b082-e26c0b636779</string>
8240 </map> 8758 </map>
8241 <key>UIImgScaleSelectedUUID</key> 8759 <key>UIImgScaleSelectedUUID</key>
8242 <map> 8760 <map>
8243 <key>Comment</key> 8761 <key>Comment</key>
8244 <string /> 8762 <string />
8245 <key>Persist</key> 8763 <key>Persist</key>
8246 <integer>0</integer> 8764 <integer>0</integer>
8247 <key>Type</key> 8765 <key>Type</key>
8248 <string>String</string> 8766 <string>String</string>
8249 <key>Value</key> 8767 <key>Value</key>
8250 <string>55aa57ef-508a-47f7-8867-85d21c5a810d</string> 8768 <string>55aa57ef-508a-47f7-8867-85d21c5a810d</string>
8251 </map> 8769 </map>
8252 <key>UIImgScaleUUID</key> 8770 <key>UIImgScaleUUID</key>
8253 <map> 8771 <map>
8254 <key>Comment</key> 8772 <key>Comment</key>
8255 <string /> 8773 <string />
8256 <key>Persist</key> 8774 <key>Persist</key>
8257 <integer>0</integer> 8775 <integer>0</integer>
8258 <key>Type</key> 8776 <key>Type</key>
8259 <string>String</string> 8777 <string>String</string>
8260 <key>Value</key> 8778 <key>Value</key>
8261 <string>88a90fef-b448-4883-9344-ecf378a60433</string> 8779 <string>88a90fef-b448-4883-9344-ecf378a60433</string>
8262 </map> 8780 </map>
8263 <key>UIImgWhiteUUID</key> 8781 <key>UIImgWhiteUUID</key>
8264 <map> 8782 <map>
8265 <key>Comment</key> 8783 <key>Comment</key>
8266 <string /> 8784 <string />
8267 <key>Persist</key> 8785 <key>Persist</key>
8268 <integer>0</integer> 8786 <integer>0</integer>
8269 <key>Type</key> 8787 <key>Type</key>
8270 <string>String</string> 8788 <string>String</string>
8271 <key>Value</key> 8789 <key>Value</key>
8272 <string>5748decc-f629-461c-9a36-a35a221fe21f</string> 8790 <string>5748decc-f629-461c-9a36-a35a221fe21f</string>
8273 </map> 8791 </map>
8274 <key>UIScaleFactor</key> 8792 <key>UIScaleFactor</key>
8275 <map> 8793 <map>
8276 <key>Comment</key> 8794 <key>Comment</key>
8277 <string>Size of UI relative to default layout on 1024x768 screen</string> 8795 <string>Size of UI relative to default layout on 1024x768 screen</string>
8278 <key>Persist</key> 8796 <key>Persist</key>
8279 <integer>1</integer> 8797 <integer>1</integer>
8280 <key>Type</key> 8798 <key>Type</key>
8281 <string>F32</string> 8799 <string>F32</string>
8282 <key>Value</key> 8800 <key>Value</key>
8283 <real>1</real> 8801 <real>1.0</real>
8284 </map> 8802 </map>
8285 <key>UISndAlert</key> 8803 <key>UISndAlert</key>
8286 <map> 8804 <map>
8287 <key>Comment</key> 8805 <key>Comment</key>
8288 <string>Sound file for alerts (uuid for sound asset)</string> 8806 <string>Sound file for alerts (uuid for sound asset)</string>
8289 <key>Persist</key> 8807 <key>Persist</key>
8290 <integer>1</integer> 8808 <integer>1</integer>
8291 <key>Type</key> 8809 <key>Type</key>
8292 <string>String</string> 8810 <string>String</string>
8293 <key>Value</key> 8811 <key>Value</key>
8294 <string>ed124764-705d-d497-167a-182cd9fa2e6c</string> 8812 <string>ed124764-705d-d497-167a-182cd9fa2e6c</string>
8295 </map> 8813 </map>
8296 <key>UISndBadKeystroke</key> 8814 <key>UISndBadKeystroke</key>
8297 <map> 8815 <map>
8298 <key>Comment</key> 8816 <key>Comment</key>
8299 <string>Sound file for invalid keystroke (uuid for sound asset)</string> 8817 <string>Sound file for invalid keystroke (uuid for sound asset)</string>
8300 <key>Persist</key> 8818 <key>Persist</key>
8301 <integer>1</integer> 8819 <integer>1</integer>
8302 <key>Type</key> 8820 <key>Type</key>
8303 <string>String</string> 8821 <string>String</string>
8304 <key>Value</key> 8822 <key>Value</key>
8305 <string>2ca849ba-2885-4bc3-90ef-d4987a5b983a</string> 8823 <string>2ca849ba-2885-4bc3-90ef-d4987a5b983a</string>
8306 </map> 8824 </map>
8307 <key>UISndClick</key> 8825 <key>UISndClick</key>
8308 <map> 8826 <map>
8309 <key>Comment</key> 8827 <key>Comment</key>
8310 <string>Sound file for mouse click (uuid for sound asset)</string> 8828 <string>Sound file for mouse click (uuid for sound asset)</string>
8311 <key>Persist</key> 8829 <key>Persist</key>
8312 <integer>1</integer> 8830 <integer>1</integer>
8313 <key>Type</key> 8831 <key>Type</key>
8314 <string>String</string> 8832 <string>String</string>
8315 <key>Value</key> 8833 <key>Value</key>
8316 <string>4c8c3c77-de8d-bde2-b9b8-32635e0fd4a6</string> 8834 <string>4c8c3c77-de8d-bde2-b9b8-32635e0fd4a6</string>
8317 </map> 8835 </map>
8318 <key>UISndClickRelease</key> 8836 <key>UISndClickRelease</key>
8319 <map> 8837 <map>
8320 <key>Comment</key> 8838 <key>Comment</key>
8321 <string>Sound file for mouse button release (uuid for sound asset)</string> 8839 <string>Sound file for mouse button release (uuid for sound asset)</string>
8322 <key>Persist</key> 8840 <key>Persist</key>
8323 <integer>1</integer> 8841 <integer>1</integer>
8324 <key>Type</key> 8842 <key>Type</key>
8325 <string>String</string> 8843 <string>String</string>
8326 <key>Value</key> 8844 <key>Value</key>
8327 <string>4c8c3c77-de8d-bde2-b9b8-32635e0fd4a6</string> 8845 <string>4c8c3c77-de8d-bde2-b9b8-32635e0fd4a6</string>
8328 </map> 8846 </map>
8329 <key>UISndDebugSpamToggle</key> 8847 <key>UISndDebugSpamToggle</key>
8330 <map> 8848 <map>
8331 <key>Comment</key> 8849 <key>Comment</key>
8332 <string>Log UI sound effects as they are played</string> 8850 <string>Log UI sound effects as they are played</string>
8333 <key>Persist</key> 8851 <key>Persist</key>
8334 <integer>1</integer> 8852 <integer>1</integer>
8335 <key>Type</key> 8853 <key>Type</key>
8336 <string>Boolean</string> 8854 <string>Boolean</string>
8337 <key>Value</key> 8855 <key>Value</key>
8338 <integer>0</integer> 8856 <integer>0</integer>
8339 </map> 8857 </map>
8340 <key>UISndHealthReductionF</key> 8858 <key>UISndHealthReductionF</key>
8341 <map> 8859 <map>
8342 <key>Comment</key> 8860 <key>Comment</key>
8343 <string>Sound file for female pain (uuid for sound asset)</string> 8861 <string>Sound file for female pain (uuid for sound asset)</string>
8344 <key>Persist</key> 8862 <key>Persist</key>
8345 <integer>1</integer> 8863 <integer>1</integer>
8346 <key>Type</key> 8864 <key>Type</key>
8347 <string>String</string> 8865 <string>String</string>
8348 <key>Value</key> 8866 <key>Value</key>
8349 <string>219c5d93-6c09-31c5-fb3f-c5fe7495c115</string> 8867 <string>219c5d93-6c09-31c5-fb3f-c5fe7495c115</string>
8350 </map> 8868 </map>
8351 <key>UISndHealthReductionM</key> 8869 <key>UISndHealthReductionM</key>
8352 <map> 8870 <map>
8353 <key>Comment</key> 8871 <key>Comment</key>
8354 <string>Sound file for male pain (uuid for sound asset)</string> 8872 <string>Sound file for male pain (uuid for sound asset)</string>
8355 <key>Persist</key> 8873 <key>Persist</key>
8356 <integer>1</integer> 8874 <integer>1</integer>
8357 <key>Type</key> 8875 <key>Type</key>
8358 <string>String</string> 8876 <string>String</string>
8359 <key>Value</key> 8877 <key>Value</key>
8360 <string>e057c244-5768-1056-c37e-1537454eeb62</string> 8878 <string>e057c244-5768-1056-c37e-1537454eeb62</string>
8361 </map> 8879 </map>
8362 <key>UISndHealthReductionThreshold</key> 8880 <key>UISndHealthReductionThreshold</key>
8363 <map> 8881 <map>
8364 <key>Comment</key> 8882 <key>Comment</key>
8365 <string>Amount of health reduction required to trigger &quot;pain&quot; sound</string> 8883 <string>Amount of health reduction required to trigger "pain" sound</string>
8366 <key>Persist</key> 8884 <key>Persist</key>
8367 <integer>1</integer> 8885 <integer>1</integer>
8368 <key>Type</key> 8886 <key>Type</key>
8369 <string>F32</string> 8887 <string>F32</string>
8370 <key>Value</key> 8888 <key>Value</key>
8371 <real>10</real> 8889 <real>10.0</real>
8372 </map> 8890 </map>
8373 <key>UISndInvalidOp</key> 8891 <key>UISndInvalidOp</key>
8374 <map> 8892 <map>
8375 <key>Comment</key> 8893 <key>Comment</key>
8376 <string>Sound file for invalid operations (uuid for sound asset)</string> 8894 <string>Sound file for invalid operations (uuid for sound asset)</string>
8377 <key>Persist</key> 8895 <key>Persist</key>
8378 <integer>1</integer> 8896 <integer>1</integer>
8379 <key>Type</key> 8897 <key>Type</key>
8380 <string>String</string> 8898 <string>String</string>
8381 <key>Value</key> 8899 <key>Value</key>
8382 <string>4174f859-0d3d-c517-c424-72923dc21f65</string> 8900 <string>4174f859-0d3d-c517-c424-72923dc21f65</string>
8383 </map> 8901 </map>
8384 <key>UISndMoneyChangeDown</key> 8902 <key>UISndMoneyChangeDown</key>
8385 <map> 8903 <map>
8386 <key>Comment</key> 8904 <key>Comment</key>
8387 <string>Sound file for L$ balance increase (uuid for sound asset)</string> 8905 <string>Sound file for L$ balance increase (uuid for sound asset)</string>
8388 <key>Persist</key> 8906 <key>Persist</key>
8389 <integer>1</integer> 8907 <integer>1</integer>
8390 <key>Type</key> 8908 <key>Type</key>
8391 <string>String</string> 8909 <string>String</string>
8392 <key>Value</key> 8910 <key>Value</key>
8393 <string>104974e3-dfda-428b-99ee-b0d4e748d3a3</string> 8911 <string>104974e3-dfda-428b-99ee-b0d4e748d3a3</string>
8394 </map> 8912 </map>
8395 <key>UISndMoneyChangeThreshold</key> 8913 <key>UISndMoneyChangeThreshold</key>
8396 <map> 8914 <map>
8397 <key>Comment</key> 8915 <key>Comment</key>
8398 <string>Amount of change in L$ balance required to trigger &quot;money&quot; sound</string> 8916 <string>Amount of change in L$ balance required to trigger "money" sound</string>
8399 <key>Persist</key> 8917 <key>Persist</key>
8400 <integer>1</integer> 8918 <integer>1</integer>
8401 <key>Type</key> 8919 <key>Type</key>
8402 <string>F32</string> 8920 <string>F32</string>
8403 <key>Value</key> 8921 <key>Value</key>
8404 <real>50</real> 8922 <real>50.0</real>
8405 </map> 8923 </map>
8406 <key>UISndMoneyChangeUp</key> 8924 <key>UISndMoneyChangeUp</key>
8407 <map> 8925 <map>
8408 <key>Comment</key> 8926 <key>Comment</key>
8409 <string>Sound file for L$ balance decrease(uuid for sound asset)</string> 8927 <string>Sound file for L$ balance decrease(uuid for sound asset)</string>
8410 <key>Persist</key> 8928 <key>Persist</key>
8411 <integer>1</integer> 8929 <integer>1</integer>
8412 <key>Type</key> 8930 <key>Type</key>
8413 <string>String</string> 8931 <string>String</string>
8414 <key>Value</key> 8932 <key>Value</key>
8415 <string>77a018af-098e-c037-51a6-178f05877c6f</string> 8933 <string>77a018af-098e-c037-51a6-178f05877c6f</string>
8416 </map> 8934 </map>
8417 <key>UISndNewIncomingIMSession</key> 8935 <key>UISndNewIncomingIMSession</key>
8418 <map> 8936 <map>
8419 <key>Comment</key> 8937 <key>Comment</key>
8420 <string>Sound file for new instant message session(uuid for sound asset)</string> 8938 <string>Sound file for new instant message session(uuid for sound asset)</string>
8421 <key>Persist</key> 8939 <key>Persist</key>
8422 <integer>1</integer> 8940 <integer>1</integer>
8423 <key>Type</key> 8941 <key>Type</key>
8424 <string>String</string> 8942 <string>String</string>
8425 <key>Value</key> 8943 <key>Value</key>
8426 <string>67cc2844-00f3-2b3c-b991-6418d01e1bb7</string> 8944 <string>67cc2844-00f3-2b3c-b991-6418d01e1bb7</string>
8427 </map> 8945 </map>
8428 <key>UISndObjectCreate</key> 8946 <key>UISndObjectCreate</key>
8429 <map> 8947 <map>
8430 <key>Comment</key> 8948 <key>Comment</key>
8431 <string>Sound file for object creation (uuid for sound asset)</string> 8949 <string>Sound file for object creation (uuid for sound asset)</string>
8432 <key>Persist</key> 8950 <key>Persist</key>
8433 <integer>1</integer> 8951 <integer>1</integer>
8434 <key>Type</key> 8952 <key>Type</key>
8435 <string>String</string> 8953 <string>String</string>
8436 <key>Value</key> 8954 <key>Value</key>
8437 <string>f4a0660f-5446-dea2-80b7-6482a082803c</string> 8955 <string>f4a0660f-5446-dea2-80b7-6482a082803c</string>
8438 </map> 8956 </map>
8439 <key>UISndObjectDelete</key> 8957 <key>UISndObjectDelete</key>
8440 <map> 8958 <map>
8441 <key>Comment</key> 8959 <key>Comment</key>
8442 <string>Sound file for object deletion (uuid for sound asset)</string> 8960 <string>Sound file for object deletion (uuid for sound asset)</string>
8443 <key>Persist</key> 8961 <key>Persist</key>
8444 <integer>1</integer> 8962 <integer>1</integer>
8445 <key>Type</key> 8963 <key>Type</key>
8446 <string>String</string> 8964 <string>String</string>
8447 <key>Value</key> 8965 <key>Value</key>
8448 <string>0cb7b00a-4c10-6948-84de-a93c09af2ba9</string> 8966 <string>0cb7b00a-4c10-6948-84de-a93c09af2ba9</string>
8449 </map> 8967 </map>
8450 <key>UISndObjectRezIn</key> 8968 <key>UISndObjectRezIn</key>
8451 <map> 8969 <map>
8452 <key>Comment</key> 8970 <key>Comment</key>
8453 <string>Sound file for rezzing objects (uuid for sound asset)</string> 8971 <string>Sound file for rezzing objects (uuid for sound asset)</string>
8454 <key>Persist</key> 8972 <key>Persist</key>
8455 <integer>1</integer> 8973 <integer>1</integer>
8456 <key>Type</key> 8974 <key>Type</key>
8457 <string>String</string> 8975 <string>String</string>
8458 <key>Value</key> 8976 <key>Value</key>
8459 <string>3c8fc726-1fd6-862d-fa01-16c5b2568db6</string> 8977 <string>3c8fc726-1fd6-862d-fa01-16c5b2568db6</string>
8460 </map> 8978 </map>
8461 <key>UISndObjectRezOut</key> 8979 <key>UISndObjectRezOut</key>
8462 <map> 8980 <map>
8463 <key>Comment</key> 8981 <key>Comment</key>
8464 <string>Sound file for derezzing objects (uuid for sound asset)</string> 8982 <string>Sound file for derezzing objects (uuid for sound asset)</string>
8465 <key>Persist</key> 8983 <key>Persist</key>
8466 <integer>1</integer> 8984 <integer>1</integer>
8467 <key>Type</key> 8985 <key>Type</key>
8468 <string>String</string> 8986 <string>String</string>
8469 <key>Value</key> 8987 <key>Value</key>
8470 <string>00000000-0000-0000-0000-000000000000</string> 8988 <string>00000000-0000-0000-0000-000000000000</string>
8471 </map> 8989 </map>
8472 <key>UISndPieMenuAppear</key> 8990 <key>UISndPieMenuAppear</key>
8473 <map> 8991 <map>
8474 <key>Comment</key> 8992 <key>Comment</key>
8475 <string>Sound file for opening pie menu (uuid for sound asset)</string> 8993 <string>Sound file for opening pie menu (uuid for sound asset)</string>
8476 <key>Persist</key> 8994 <key>Persist</key>
8477 <integer>1</integer> 8995 <integer>1</integer>
8478 <key>Type</key> 8996 <key>Type</key>
8479 <string>String</string> 8997 <string>String</string>
8480 <key>Value</key> 8998 <key>Value</key>
8481 <string>8eaed61f-92ff-6485-de83-4dcc938a478e</string> 8999 <string>8eaed61f-92ff-6485-de83-4dcc938a478e</string>
8482 </map> 9000 </map>
8483 <key>UISndPieMenuHide</key> 9001 <key>UISndPieMenuHide</key>
8484 <map> 9002 <map>
8485 <key>Comment</key> 9003 <key>Comment</key>
8486 <string>Sound file for closing pie menu (uuid for sound asset)</string> 9004 <string>Sound file for closing pie menu (uuid for sound asset)</string>
8487 <key>Persist</key> 9005 <key>Persist</key>
8488 <integer>1</integer> 9006 <integer>1</integer>
8489 <key>Type</key> 9007 <key>Type</key>
8490 <string>String</string> 9008 <string>String</string>
8491 <key>Value</key> 9009 <key>Value</key>
8492 <string>00000000-0000-0000-0000-000000000000</string> 9010 <string>00000000-0000-0000-0000-000000000000</string>
8493 </map> 9011 </map>
8494 <key>UISndPieMenuSliceHighlight0</key> 9012 <key>UISndPieMenuSliceHighlight0</key>
8495 <map> 9013 <map>
8496 <key>Comment</key> 9014 <key>Comment</key>
8497 <string>Sound file for selecting pie menu item 0 (uuid for sound asset)</string> 9015 <string>Sound file for selecting pie menu item 0 (uuid for sound asset)</string>
8498 <key>Persist</key> 9016 <key>Persist</key>
8499 <integer>1</integer> 9017 <integer>1</integer>
8500 <key>Type</key> 9018 <key>Type</key>
8501 <string>String</string> 9019 <string>String</string>
8502 <key>Value</key> 9020 <key>Value</key>
8503 <string>d9f73cf8-17b4-6f7a-1565-7951226c305d</string> 9021 <string>d9f73cf8-17b4-6f7a-1565-7951226c305d</string>
8504 </map> 9022 </map>
8505 <key>UISndPieMenuSliceHighlight1</key> 9023 <key>UISndPieMenuSliceHighlight1</key>
8506 <map> 9024 <map>
8507 <key>Comment</key> 9025 <key>Comment</key>
8508 <string>Sound file for selecting pie menu item 1 (uuid for sound asset)</string> 9026 <string>Sound file for selecting pie menu item 1 (uuid for sound asset)</string>
8509 <key>Persist</key> 9027 <key>Persist</key>
8510 <integer>1</integer> 9028 <integer>1</integer>
8511 <key>Type</key> 9029 <key>Type</key>
8512 <string>String</string> 9030 <string>String</string>
8513 <key>Value</key> 9031 <key>Value</key>
8514 <string>f6ba9816-dcaf-f755-7b67-51b31b6233e5</string> 9032 <string>f6ba9816-dcaf-f755-7b67-51b31b6233e5</string>
8515 </map> 9033 </map>
8516 <key>UISndPieMenuSliceHighlight2</key> 9034 <key>UISndPieMenuSliceHighlight2</key>
8517 <map> 9035 <map>
8518 <key>Comment</key> 9036 <key>Comment</key>
8519 <string>Sound file for selecting pie menu item 2 (uuid for sound asset)</string> 9037 <string>Sound file for selecting pie menu item 2 (uuid for sound asset)</string>
8520 <key>Persist</key> 9038 <key>Persist</key>
8521 <integer>1</integer> 9039 <integer>1</integer>
8522 <key>Type</key> 9040 <key>Type</key>
8523 <string>String</string> 9041 <string>String</string>
8524 <key>Value</key> 9042 <key>Value</key>
8525 <string>7aff2265-d05b-8b72-63c7-dbf96dc2f21f</string> 9043 <string>7aff2265-d05b-8b72-63c7-dbf96dc2f21f</string>
8526 </map> 9044 </map>
8527 <key>UISndPieMenuSliceHighlight3</key> 9045 <key>UISndPieMenuSliceHighlight3</key>
8528 <map> 9046 <map>
8529 <key>Comment</key> 9047 <key>Comment</key>
8530 <string>Sound file for selecting pie menu item 3 (uuid for sound asset)</string> 9048 <string>Sound file for selecting pie menu item 3 (uuid for sound asset)</string>
8531 <key>Persist</key> 9049 <key>Persist</key>
8532 <integer>1</integer> 9050 <integer>1</integer>
8533 <key>Type</key> 9051 <key>Type</key>
8534 <string>String</string> 9052 <string>String</string>
8535 <key>Value</key> 9053 <key>Value</key>
8536 <string>09b2184e-8601-44e2-afbb-ce37434b8ba1</string> 9054 <string>09b2184e-8601-44e2-afbb-ce37434b8ba1</string>
8537 </map> 9055 </map>
8538 <key>UISndPieMenuSliceHighlight4</key> 9056 <key>UISndPieMenuSliceHighlight4</key>
8539 <map> 9057 <map>
8540 <key>Comment</key> 9058 <key>Comment</key>
8541 <string>Sound file for selecting pie menu item 4 (uuid for sound asset)</string> 9059 <string>Sound file for selecting pie menu item 4 (uuid for sound asset)</string>
8542 <key>Persist</key> 9060 <key>Persist</key>
8543 <integer>1</integer> 9061 <integer>1</integer>
8544 <key>Type</key> 9062 <key>Type</key>
8545 <string>String</string> 9063 <string>String</string>
8546 <key>Value</key> 9064 <key>Value</key>
8547 <string>bbe4c7fc-7044-b05e-7b89-36924a67593c</string> 9065 <string>bbe4c7fc-7044-b05e-7b89-36924a67593c</string>
8548 </map> 9066 </map>
8549 <key>UISndPieMenuSliceHighlight5</key> 9067 <key>UISndPieMenuSliceHighlight5</key>
8550 <map> 9068 <map>
8551 <key>Comment</key> 9069 <key>Comment</key>
8552 <string>Sound file for selecting pie menu item 5 (uuid for sound asset)</string> 9070 <string>Sound file for selecting pie menu item 5 (uuid for sound asset)</string>
8553 <key>Persist</key> 9071 <key>Persist</key>
8554 <integer>1</integer> 9072 <integer>1</integer>
8555 <key>Type</key> 9073 <key>Type</key>
8556 <string>String</string> 9074 <string>String</string>
8557 <key>Value</key> 9075 <key>Value</key>
8558 <string>d166039b-b4f5-c2ec-4911-c85c727b016c</string> 9076 <string>d166039b-b4f5-c2ec-4911-c85c727b016c</string>
8559 </map> 9077 </map>
8560 <key>UISndPieMenuSliceHighlight6</key> 9078 <key>UISndPieMenuSliceHighlight6</key>
8561 <map> 9079 <map>
8562 <key>Comment</key> 9080 <key>Comment</key>
8563 <string>Sound file for selecting pie menu item 6 (uuid for sound asset)</string> 9081 <string>Sound file for selecting pie menu item 6 (uuid for sound asset)</string>
8564 <key>Persist</key> 9082 <key>Persist</key>
8565 <integer>1</integer> 9083 <integer>1</integer>
8566 <key>Type</key> 9084 <key>Type</key>
8567 <string>String</string> 9085 <string>String</string>
8568 <key>Value</key> 9086 <key>Value</key>
8569 <string>242af82b-43c2-9a3b-e108-3b0c7e384981</string> 9087 <string>242af82b-43c2-9a3b-e108-3b0c7e384981</string>
8570 </map> 9088 </map>
8571 <key>UISndPieMenuSliceHighlight7</key> 9089 <key>UISndPieMenuSliceHighlight7</key>
8572 <map> 9090 <map>
8573 <key>Comment</key> 9091 <key>Comment</key>
8574 <string>Sound file for selecting pie menu item 7 (uuid for sound asset)</string> 9092 <string>Sound file for selecting pie menu item 7 (uuid for sound asset)</string>
8575 <key>Persist</key> 9093 <key>Persist</key>
8576 <integer>1</integer> 9094 <integer>1</integer>
8577 <key>Type</key> 9095 <key>Type</key>
8578 <string>String</string> 9096 <string>String</string>
8579 <key>Value</key> 9097 <key>Value</key>
8580 <string>c1f334fb-a5be-8fe7-22b3-29631c21cf0b</string> 9098 <string>c1f334fb-a5be-8fe7-22b3-29631c21cf0b</string>
8581 </map> 9099 </map>
8582 <key>UISndSnapshot</key> 9100 <key>UISndSnapshot</key>
8583 <map> 9101 <map>
8584 <key>Comment</key> 9102 <key>Comment</key>
8585 <string>Sound file for taking a snapshot (uuid for sound asset)</string> 9103 <string>Sound file for taking a snapshot (uuid for sound asset)</string>
8586 <key>Persist</key> 9104 <key>Persist</key>
8587 <integer>1</integer> 9105 <integer>1</integer>
8588 <key>Type</key> 9106 <key>Type</key>
8589 <string>String</string> 9107 <string>String</string>
8590 <key>Value</key> 9108 <key>Value</key>
8591 <string>3d09f582-3851-c0e0-f5ba-277ac5c73fb4</string> 9109 <string>3d09f582-3851-c0e0-f5ba-277ac5c73fb4</string>
8592 </map> 9110 </map>
8593 <key>UISndStartIM</key> 9111 <key>UISndStartIM</key>
8594 <map> 9112 <map>
8595 <key>Comment</key> 9113 <key>Comment</key>
8596 <string>Sound file for starting a new IM session (uuid for sound asset)</string> 9114 <string>Sound file for starting a new IM session (uuid for sound asset)</string>
8597 <key>Persist</key> 9115 <key>Persist</key>
8598 <integer>1</integer> 9116 <integer>1</integer>
8599 <key>Type</key> 9117 <key>Type</key>
8600 <string>String</string> 9118 <string>String</string>
8601 <key>Value</key> 9119 <key>Value</key>
8602 <string>c825dfbc-9827-7e02-6507-3713d18916c1</string> 9120 <string>c825dfbc-9827-7e02-6507-3713d18916c1</string>
8603 </map> 9121 </map>
8604 <key>UISndTeleportOut</key> 9122 <key>UISndTeleportOut</key>
8605 <map> 9123 <map>
8606 <key>Comment</key> 9124 <key>Comment</key>
8607 <string>Sound file for teleporting (uuid for sound asset)</string> 9125 <string>Sound file for teleporting (uuid for sound asset)</string>
8608 <key>Persist</key> 9126 <key>Persist</key>
8609 <integer>1</integer> 9127 <integer>1</integer>
8610 <key>Type</key> 9128 <key>Type</key>
8611 <string>String</string> 9129 <string>String</string>
8612 <key>Value</key> 9130 <key>Value</key>
8613 <string>d7a9a565-a013-2a69-797d-5332baa1a947</string> 9131 <string>d7a9a565-a013-2a69-797d-5332baa1a947</string>
8614 </map> 9132 </map>
8615 <key>UISndTyping</key> 9133 <key>UISndTyping</key>
8616 <map> 9134 <map>
8617 <key>Comment</key> 9135 <key>Comment</key>
8618 <string>Sound file for starting to type a chat message (uuid for sound asset)</string> 9136 <string>Sound file for starting to type a chat message (uuid for sound asset)</string>
8619 <key>Persist</key> 9137 <key>Persist</key>
8620 <integer>1</integer> 9138 <integer>1</integer>
8621 <key>Type</key> 9139 <key>Type</key>
8622 <string>String</string> 9140 <string>String</string>
8623 <key>Value</key> 9141 <key>Value</key>
8624 <string>5e191c7b-8996-9ced-a177-b2ac32bfea06</string> 9142 <string>5e191c7b-8996-9ced-a177-b2ac32bfea06</string>
8625 </map> 9143 </map>
8626 <key>UISndWindowClose</key> 9144 <key>UISndWindowClose</key>
8627 <map> 9145 <map>
8628 <key>Comment</key> 9146 <key>Comment</key>
8629 <string>Sound file for closing a window (uuid for sound asset)</string> 9147 <string>Sound file for closing a window (uuid for sound asset)</string>
8630 <key>Persist</key> 9148 <key>Persist</key>
8631 <integer>1</integer> 9149 <integer>1</integer>
8632 <key>Type</key> 9150 <key>Type</key>
8633 <string>String</string> 9151 <string>String</string>
8634 <key>Value</key> 9152 <key>Value</key>
8635 <string>2c346eda-b60c-ab33-1119-b8941916a499</string> 9153 <string>2c346eda-b60c-ab33-1119-b8941916a499</string>
8636 </map> 9154 </map>
8637 <key>UISndWindowOpen</key> 9155 <key>UISndWindowOpen</key>
8638 <map> 9156 <map>
8639 <key>Comment</key> 9157 <key>Comment</key>
8640 <string>Sound file for opening a window (uuid for sound asset)</string> 9158 <string>Sound file for opening a window (uuid for sound asset)</string>
8641 <key>Persist</key> 9159 <key>Persist</key>
8642 <integer>1</integer> 9160 <integer>1</integer>
8643 <key>Type</key> 9161 <key>Type</key>
8644 <string>String</string> 9162 <string>String</string>
8645 <key>Value</key> 9163 <key>Value</key>
8646 <string>c80260ba-41fd-8a46-768a-6bf236360e3a</string> 9164 <string>c80260ba-41fd-8a46-768a-6bf236360e3a</string>
8647 </map> 9165 </map>
8648 <key>UseAltKeyForMenus</key> 9166 <key>UseAltKeyForMenus</key>
8649 <map> 9167 <map>
8650 <key>Comment</key> 9168 <key>Comment</key>
8651 <string>Access menus via keyboard by tapping Alt</string> 9169 <string>Access menus via keyboard by tapping Alt</string>
8652 <key>Persist</key> 9170 <key>Persist</key>
8653 <integer>1</integer> 9171 <integer>1</integer>
8654 <key>Type</key> 9172 <key>Type</key>
8655 <string>Boolean</string> 9173 <string>Boolean</string>
8656 <key>Value</key> 9174 <key>Value</key>
8657 <integer>0</integer> 9175 <integer>0</integer>
8658 </map> 9176 </map>
8659 <key>UseChatBubbles</key> 9177 <key>UseChatBubbles</key>
8660 <map> 9178 <map>
8661 <key>Comment</key> 9179 <key>Comment</key>
8662 <string>Show chat above avatars head in chat bubbles</string> 9180 <string>Show chat above avatars head in chat bubbles</string>
8663 <key>Persist</key> 9181 <key>Persist</key>
8664 <integer>1</integer> 9182 <integer>1</integer>
8665 <key>Type</key> 9183 <key>Type</key>
8666 <string>Boolean</string> 9184 <string>Boolean</string>
8667 <key>Value</key> 9185 <key>Value</key>
8668 <integer>0</integer> 9186 <integer>0</integer>
8669 </map> 9187 </map>
8670 <key>UseDebugLogin</key> 9188 <key>UseDebugLogin</key>
8671 <map> 9189 <map>
8672 <key>Comment</key> 9190 <key>Comment</key>
8673 <string>Provides extra control over which grid to connect to</string> 9191 <string>Provides extra control over which grid to connect to</string>
8674 <key>Persist</key> 9192 <key>Persist</key>
8675 <integer>1</integer> 9193 <integer>1</integer>
8676 <key>Type</key> 9194 <key>Type</key>
8677 <string>Boolean</string> 9195 <string>Boolean</string>
8678 <key>Value</key> 9196 <key>Value</key>
8679 <integer>0</integer> 9197 <integer>0</integer>
8680 </map> 9198 </map>
8681 <key>UseDebugMenus</key> 9199 <key>UseDebugMenus</key>
8682 <map> 9200 <map>
8683 <key>Comment</key> 9201 <key>Comment</key>
8684 <string>Turns on &quot;Debug&quot; menu</string> 9202 <string>Turns on "Debug" menu</string>
8685 <key>Persist</key> 9203 <key>Persist</key>
8686 <integer>1</integer> 9204 <integer>1</integer>
8687 <key>Type</key> 9205 <key>Type</key>
8688 <string>Boolean</string> 9206 <string>Boolean</string>
8689 <key>Value</key> 9207 <key>Value</key>
8690 <integer>0</integer> 9208 <integer>0</integer>
8691 </map> 9209 </map>
8692 <key>UseDefaultColorPicker</key> 9210 <key>UseDefaultColorPicker</key>
8693 <map> 9211 <map>
8694 <key>Comment</key> 9212 <key>Comment</key>
8695 <string>Use color picker supplied by operating system</string> 9213 <string>Use color picker supplied by operating system</string>
8696 <key>Persist</key> 9214 <key>Persist</key>
8697 <integer>1</integer> 9215 <integer>1</integer>
8698 <key>Type</key> 9216 <key>Type</key>
8699 <string>Boolean</string> 9217 <string>Boolean</string>
8700 <key>Value</key> 9218 <key>Value</key>
8701 <integer>0</integer> 9219 <integer>0</integer>
8702 </map> 9220 </map>
8703 <key>UseEnergy</key> 9221 <key>UseEnergy</key>
8704 <map> 9222 <map>
8705 <key>Comment</key> 9223 <key>Comment</key>
8706 <string /> 9224 <string />
8707 <key>Persist</key> 9225 <key>Persist</key>
8708 <integer>0</integer> 9226 <integer>0</integer>
8709 <key>Type</key> 9227 <key>Type</key>
8710 <string>Boolean</string> 9228 <string>Boolean</string>
8711 <key>Value</key> 9229 <key>Value</key>
8712 <integer>1</integer> 9230 <integer>1</integer>
8713 </map> 9231 </map>
8714 <key>UseExternalBrowser</key> 9232 <key>UseExternalBrowser</key>
8715 <map> 9233 <map>
8716 <key>Comment</key> 9234 <key>Comment</key>
8717 <string>Use default browser when opening web pages instead of in-world browser.</string> 9235 <string>Use default browser when opening web pages instead of in-world browser.</string>
8718 <key>Persist</key> 9236 <key>Persist</key>
8719 <integer>1</integer> 9237 <integer>1</integer>
8720 <key>Type</key> 9238 <key>Type</key>
8721 <string>Boolean</string> 9239 <string>Boolean</string>
8722 <key>Value</key> 9240 <key>Value</key>
8723 <integer>0</integer> 9241 <integer>0</integer>
8724 </map> 9242 </map>
8725 <key>UseFreezeFrame</key> 9243 <key>UseFreezeFrame</key>
8726 <map> 9244 <map>
8727 <key>Comment</key> 9245 <key>Comment</key>
8728 <string>Freeze time when taking snapshots.</string> 9246 <string>Freeze time when taking snapshots.</string>
8729 <key>Persist</key> 9247 <key>Persist</key>
8730 <integer>1</integer> 9248 <integer>1</integer>
8731 <key>Type</key> 9249 <key>Type</key>
8732 <string>Boolean</string> 9250 <string>Boolean</string>
8733 <key>Value</key> 9251 <key>Value</key>
8734 <integer>0</integer> 9252 <integer>0</integer>
8735 </map> 9253 </map>
8736 <key>UseOcclusion</key> 9254 <key>UseOcclusion</key>
8737 <map> 9255 <map>
8738 <key>Comment</key> 9256 <key>Comment</key>
8739 <string>Enable object culling based on occlusion (coverage) by other objects</string> 9257 <string>Enable object culling based on occlusion (coverage) by other objects</string>
8740 <key>Persist</key> 9258 <key>Persist</key>
8741 <integer>1</integer> 9259 <integer>1</integer>
8742 <key>Type</key> 9260 <key>Type</key>
8743 <string>Boolean</string> 9261 <string>Boolean</string>
8744 <key>Value</key> 9262 <key>Value</key>
8745 <integer>1</integer> 9263 <integer>1</integer>
8746 </map> 9264 </map>
9265 <key>UseStartScreen</key>
9266 <map>
9267 <key>Comment</key>
9268 <string>Whether to load a start screen image or not.</string>
9269 <key>Persist</key>
9270 <integer>1</integer>
9271 <key>Type</key>
9272 <string>Boolean</string>
9273 <key>Value</key>
9274 <integer>1</integer>
9275 </map>
8747 <key>UseWebPagesOnPrims</key> 9276 <key>UseWebPagesOnPrims</key>
8748 <map> 9277 <map>
8749 <key>Comment</key> 9278 <key>Comment</key>
8750 <string>[NOT USED]</string> 9279 <string>[NOT USED]</string>
8751 <key>Persist</key> 9280 <key>Persist</key>
8752 <integer>1</integer> 9281 <integer>1</integer>
8753 <key>Type</key> 9282 <key>Type</key>
8754 <string>Boolean</string> 9283 <string>Boolean</string>
8755 <key>Value</key> 9284 <key>Value</key>
8756 <integer>0</integer> 9285 <integer>0</integer>
8757 </map> 9286 </map>
8758 <key>UserConnectionPort</key> 9287 <key>UserConnectionPort</key>
8759 <map> 9288 <map>
8760 <key>Comment</key> 9289 <key>Comment</key>
8761 <string>Port that this client transmits on.</string> 9290 <string>Port that this client transmits on.</string>
8762 <key>Persist</key> 9291 <key>Persist</key>
8763 <integer>1</integer> 9292 <integer>1</integer>
8764 <key>Type</key> 9293 <key>Type</key>
8765 <string>U32</string> 9294 <string>U32</string>
8766 <key>Value</key> 9295 <key>Value</key>
8767 <integer>0</integer> 9296 <integer>0</integer>
8768 </map> 9297 </map>
8769 <key>UserLogFile</key> 9298 <key>UserLogFile</key>
8770 <map> 9299 <map>
8771 <key>Comment</key> 9300 <key>Comment</key>
8772 <string>User specified log file name.</string> 9301 <string>User specified log file name.</string>
8773 <key>Persist</key> 9302 <key>Persist</key>
8774 <integer>1</integer> 9303 <integer>1</integer>
8775 <key>Type</key> 9304 <key>Type</key>
8776 <string>String</string> 9305 <string>String</string>
8777 <key>Value</key> 9306 <key>Value</key>
8778 <string /> 9307 <string />
8779 </map> 9308 </map>
8780 <key>UserLoginInfo</key> 9309 <key>UserLoginInfo</key>
8781 <map> 9310 <map>
8782 <key>Comment</key> 9311 <key>Comment</key>
8783 <string>Users loging data.</string> 9312 <string>Users loging data.</string>
8784 <key>Persist</key> 9313 <key>Persist</key>
8785 <integer>1</integer> 9314 <integer>1</integer>
8786 <key>Type</key> 9315 <key>Type</key>
8787 <string>LLSD</string> 9316 <string>LLSD</string>
8788 <key>Value</key> 9317 <key>Value</key>
8789 <map /> 9318 <map>
8790 </map> 9319 </map>
8791 <key>UseStartScreen</key> 9320 </map>
8792 <map>
8793 <key>Comment</key>
8794 <string>Whether to load a start screen image or not.</string>
8795 <key>Persist</key>
8796 <integer>1</integer>
8797 <key>Type</key>
8798 <string>Boolean</string>
8799 <key>Value</key>
8800 <integer>1</integer>
8801 </map>
8802 <key>VFSOldSize</key> 9321 <key>VFSOldSize</key>
8803 <map> 9322 <map>
8804 <key>Comment</key> 9323 <key>Comment</key>
8805 <string>[DO NOT MODIFY] Controls resizing of local file cache</string> 9324 <string>[DO NOT MODIFY] Controls resizing of local file cache</string>
8806 <key>Persist</key> 9325 <key>Persist</key>
8807 <integer>1</integer> 9326 <integer>1</integer>
8808 <key>Type</key> 9327 <key>Type</key>
8809 <string>U32</string> 9328 <string>U32</string>
8810 <key>Value</key> 9329 <key>Value</key>
8811 <integer>0</integer> 9330 <integer>0</integer>
8812 </map> 9331 </map>
8813 <key>VFSSalt</key> 9332 <key>VFSSalt</key>
8814 <map> 9333 <map>
8815 <key>Comment</key> 9334 <key>Comment</key>
8816 <string>[DO NOT MODIFY] Controls local file caching behavior</string> 9335 <string>[DO NOT MODIFY] Controls local file caching behavior</string>
8817 <key>Persist</key> 9336 <key>Persist</key>
8818 <integer>1</integer> 9337 <integer>1</integer>
8819 <key>Type</key> 9338 <key>Type</key>
8820 <string>U32</string> 9339 <string>U32</string>
8821 <key>Value</key> 9340 <key>Value</key>
8822 <integer>1</integer> 9341 <integer>1</integer>
8823 </map> 9342 </map>
8824 <key>VectorizeEnable</key> 9343 <key>VectorizeEnable</key>
8825 <map> 9344 <map>
8826 <key>Comment</key> 9345 <key>Comment</key>
8827 <string>Enable general vector operations and data alignment.</string> 9346 <string>Enable general vector operations and data alignment.</string>
8828 <key>Persist</key> 9347 <key>Persist</key>
8829 <integer>1</integer> 9348 <integer>1</integer>
8830 <key>Type</key> 9349 <key>Type</key>
8831 <string>Boolean</string> 9350 <string>Boolean</string>
8832 <key>Value</key> 9351 <key>Value</key>
8833 <integer>0</integer> 9352 <integer>0</integer>
8834 </map> 9353 </map>
8835 <key>VectorizePerfTest</key> 9354 <key>VectorizePerfTest</key>
8836 <map> 9355 <map>
8837 <key>Comment</key> 9356 <key>Comment</key>
8838 <string>Test SSE/vectorization performance and choose fastest version.</string> 9357 <string>Test SSE/vectorization performance and choose fastest version.</string>
8839 <key>Persist</key> 9358 <key>Persist</key>
8840 <integer>1</integer> 9359 <integer>1</integer>
8841 <key>Type</key> 9360 <key>Type</key>
8842 <string>Boolean</string> 9361 <string>Boolean</string>
8843 <key>Value</key> 9362 <key>Value</key>
8844 <integer>1</integer> 9363 <integer>1</integer>
8845 </map> 9364 </map>
8846 <key>VectorizeProcessor</key> 9365 <key>VectorizeProcessor</key>
8847 <map> 9366 <map>
8848 <key>Comment</key> 9367 <key>Comment</key>
8849 <string>0=Compiler Default, 1=SSE, 2=SSE2, autodetected</string> 9368 <string>0=Compiler Default, 1=SSE, 2=SSE2, autodetected</string>
8850 <key>Persist</key> 9369 <key>Persist</key>
8851 <integer>0</integer> 9370 <integer>0</integer>
8852 <key>Type</key> 9371 <key>Type</key>
8853 <string>U32</string> 9372 <string>U32</string>
8854 <key>Value</key> 9373 <key>Value</key>
8855 <integer>0</integer> 9374 <integer>0</integer>
8856 </map> 9375 </map>
8857 <key>VectorizeSkin</key> 9376 <key>VectorizeSkin</key>
8858 <map> 9377 <map>
8859 <key>Comment</key> 9378 <key>Comment</key>
8860 <string>Enable vector operations for avatar skinning.</string> 9379 <string>Enable vector operations for avatar skinning.</string>
8861 <key>Persist</key> 9380 <key>Persist</key>
8862 <integer>1</integer> 9381 <integer>1</integer>
8863 <key>Type</key> 9382 <key>Type</key>
8864 <string>Boolean</string> 9383 <string>Boolean</string>
8865 <key>Value</key> 9384 <key>Value</key>
8866 <integer>1</integer> 9385 <integer>1</integer>
8867 </map> 9386 </map>
8868 <key>VelocityInterpolate</key> 9387 <key>VelocityInterpolate</key>
8869 <map> 9388 <map>
8870 <key>Comment</key> 9389 <key>Comment</key>
8871 <string>Extrapolate object motion from last packet based on received velocity</string> 9390 <string>Extrapolate object motion from last packet based on received velocity</string>
8872 <key>Persist</key> 9391 <key>Persist</key>
8873 <integer>1</integer> 9392 <integer>1</integer>
8874 <key>Type</key> 9393 <key>Type</key>
8875 <string>Boolean</string> 9394 <string>Boolean</string>
8876 <key>Value</key> 9395 <key>Value</key>
8877 <integer>1</integer> 9396 <integer>1</integer>
8878 </map> 9397 </map>
8879 <key>VerboseLogs</key> 9398 <key>VerboseLogs</key>
8880 <map> 9399 <map>
8881 <key>Comment</key> 9400 <key>Comment</key>
8882 <string>Display source file and line number for each log item for debugging purposes</string> 9401 <string>Display source file and line number for each log item for debugging purposes</string>
8883 <key>Persist</key> 9402 <key>Persist</key>
8884 <integer>1</integer> 9403 <integer>1</integer>
8885 <key>Type</key> 9404 <key>Type</key>
8886 <string>Boolean</string> 9405 <string>Boolean</string>
8887 <key>Value</key> 9406 <key>Value</key>
8888 <integer>0</integer> 9407 <integer>0</integer>
8889 </map> 9408 </map>
8890 <key>VersionChannelName</key> 9409 <key>VersionChannelName</key>
8891 <map> 9410 <map>
8892 <key>Comment</key> 9411 <key>Comment</key>
8893 <string>Versioning Channel Name.</string> 9412 <string>Versioning Channel Name.</string>
8894 <key>Persist</key> 9413 <key>Persist</key>
8895 <integer>1</integer> 9414 <integer>1</integer>
8896 <key>Type</key> 9415 <key>Type</key>
8897 <string>String</string> 9416 <string>String</string>
8898 <key>Value</key> 9417 <key>Value</key>
8899 <string>Second Life Release</string> 9418 <string>Second Life Release</string>
8900 </map> 9419 </map>
8901 <key>VertexShaderEnable</key> 9420 <key>VertexShaderEnable</key>
8902 <map> 9421 <map>
8903 <key>Comment</key> 9422 <key>Comment</key>
8904 <string>Enable/disable all GLSL shaders (debug)</string> 9423 <string>Enable/disable all GLSL shaders (debug)</string>
8905 <key>Persist</key> 9424 <key>Persist</key>
8906 <integer>1</integer> 9425 <integer>1</integer>
8907 <key>Type</key> 9426 <key>Type</key>
8908 <string>Boolean</string> 9427 <string>Boolean</string>
8909 <key>Value</key> 9428 <key>Value</key>
8910 <integer>0</integer> 9429 <integer>0</integer>
8911 </map> 9430 </map>
8912 <key>VivoxDebugLevel</key> 9431 <key>VivoxDebugLevel</key>
8913 <map> 9432 <map>
8914 <key>Comment</key> 9433 <key>Comment</key>
8915 <string>Logging level to use when launching the vivox daemon</string> 9434 <string>Logging level to use when launching the vivox daemon</string>
8916 <key>Persist</key> 9435 <key>Persist</key>
8917 <integer>1</integer> 9436 <integer>1</integer>
8918 <key>Type</key> 9437 <key>Type</key>
8919 <string>String</string> 9438 <string>String</string>
8920 <key>Value</key> 9439 <key>Value</key>
8921 <string>-1</string> 9440 <string>-1</string>
8922 </map> 9441 </map>
8923 <key>VivoxDebugServerName</key> 9442 <key>VivoxDebugServerName</key>
8924 <map> 9443 <map>
8925 <key>Comment</key> 9444 <key>Comment</key>
8926 <string>Hostname of the vivox account server to use for voice when not connected to Agni.</string> 9445 <string>Hostname of the vivox account server to use for voice when not connected to Agni.</string>
8927 <key>Persist</key> 9446 <key>Persist</key>
8928 <integer>1</integer> 9447 <integer>1</integer>
8929 <key>Type</key> 9448 <key>Type</key>
8930 <string>String</string> 9449 <string>String</string>
8931 <key>Value</key> 9450 <key>Value</key>
8932 <string>bhd.vivox.com</string> 9451 <string>bhd.vivox.com</string>
8933 </map> 9452 </map>
8934 <key>VoiceCallsFriendsOnly</key> 9453 <key>VoiceCallsFriendsOnly</key>
8935 <map> 9454 <map>
8936 <key>Comment</key> 9455 <key>Comment</key>
8937 <string>Only accept voice calls from residents on your friends list</string> 9456 <string>Only accept voice calls from residents on your friends list</string>
8938 <key>Persist</key> 9457 <key>Persist</key>
8939 <integer>1</integer> 9458 <integer>1</integer>
8940 <key>Type</key> 9459 <key>Type</key>
8941 <string>Boolean</string> 9460 <string>Boolean</string>
8942 <key>Value</key> 9461 <key>Value</key>
8943 <integer>0</integer> 9462 <integer>0</integer>
8944 </map> 9463 </map>
8945 <key>VoiceEarLocation</key> 9464 <key>VoiceEarLocation</key>
8946 <map> 9465 <map>
8947 <key>Comment</key> 9466 <key>Comment</key>
8948 <string>Location of the virtual ear for voice</string> 9467 <string>Location of the virtual ear for voice</string>
8949 <key>Persist</key> 9468 <key>Persist</key>
8950 <integer>1</integer> 9469 <integer>1</integer>
8951 <key>Type</key> 9470 <key>Type</key>
8952 <string>S32</string> 9471 <string>S32</string>
8953 <key>Value</key> 9472 <key>Value</key>
8954 <integer>0</integer> 9473 <integer>0</integer>
8955 </map> 9474 </map>
8956 <key>VoiceHost</key> 9475 <key>VoiceHost</key>
8957 <map> 9476 <map>
8958 <key>Comment</key> 9477 <key>Comment</key>
8959 <string>Client SLVoice host to connect to</string> 9478 <string>Client SLVoice host to connect to</string>
8960 <key>Persist</key> 9479 <key>Persist</key>
8961 <integer>1</integer> 9480 <integer>1</integer>
8962 <key>Type</key> 9481 <key>Type</key>
8963 <string>String</string> 9482 <string>String</string>
8964 <key>Value</key> 9483 <key>Value</key>
8965 <string>127.0.0.1</string> 9484 <string>127.0.0.1</string>
8966 </map> 9485 </map>
8967 <key>VoiceImageLevel0</key> 9486 <key>VoiceImageLevel0</key>
8968 <map> 9487 <map>
8969 <key>Comment</key> 9488 <key>Comment</key>
8970 <string>Texture UUID for voice image level 0</string> 9489 <string>Texture UUID for voice image level 0</string>
8971 <key>Persist</key> 9490 <key>Persist</key>
8972 <integer>1</integer> 9491 <integer>1</integer>
8973 <key>Type</key> 9492 <key>Type</key>
8974 <string>String</string> 9493 <string>String</string>
8975 <key>Value</key> 9494 <key>Value</key>
8976 <string>041ee5a0-cb6a-9ac5-6e49-41e9320507d5</string> 9495 <string>041ee5a0-cb6a-9ac5-6e49-41e9320507d5</string>
8977 </map> 9496 </map>
8978 <key>VoiceImageLevel1</key> 9497 <key>VoiceImageLevel1</key>
8979 <map> 9498 <map>
8980 <key>Comment</key> 9499 <key>Comment</key>
8981 <string>Texture UUID for voice image level 1</string> 9500 <string>Texture UUID for voice image level 1</string>
8982 <key>Persist</key> 9501 <key>Persist</key>
8983 <integer>1</integer> 9502 <integer>1</integer>
8984 <key>Type</key> 9503 <key>Type</key>
8985 <string>String</string> 9504 <string>String</string>
8986 <key>Value</key> 9505 <key>Value</key>
8987 <string>29de489d-0491-fb00-7dab-f9e686d31e83</string> 9506 <string>29de489d-0491-fb00-7dab-f9e686d31e83</string>
8988 </map> 9507 </map>
8989 <key>VoiceImageLevel2</key> 9508 <key>VoiceImageLevel2</key>
8990 <map> 9509 <map>
8991 <key>Comment</key> 9510 <key>Comment</key>
8992 <string>Texture UUID for voice image level 2</string> 9511 <string>Texture UUID for voice image level 2</string>
8993 <key>Persist</key> 9512 <key>Persist</key>
8994 <integer>1</integer> 9513 <integer>1</integer>
8995 <key>Type</key> 9514 <key>Type</key>
8996 <string>String</string> 9515 <string>String</string>
8997 <key>Value</key> 9516 <key>Value</key>
8998 <string>29de489d-0491-fb00-7dab-f9e686d31e83</string> 9517 <string>29de489d-0491-fb00-7dab-f9e686d31e83</string>
8999 </map> 9518 </map>
9000 <key>VoiceImageLevel3</key> 9519 <key>VoiceImageLevel3</key>
9001 <map> 9520 <map>
9002 <key>Comment</key> 9521 <key>Comment</key>
9003 <string>Texture UUID for voice image level 3</string> 9522 <string>Texture UUID for voice image level 3</string>
9004 <key>Persist</key> 9523 <key>Persist</key>
9005 <integer>1</integer> 9524 <integer>1</integer>
9006 <key>Type</key> 9525 <key>Type</key>
9007 <string>String</string> 9526 <string>String</string>
9008 <key>Value</key> 9527 <key>Value</key>
9009 <string>29de489d-0491-fb00-7dab-f9e686d31e83</string> 9528 <string>29de489d-0491-fb00-7dab-f9e686d31e83</string>
9010 </map> 9529 </map>
9011 <key>VoiceImageLevel4</key> 9530 <key>VoiceImageLevel4</key>
9012 <map> 9531 <map>
9013 <key>Comment</key> 9532 <key>Comment</key>
9014 <string>Texture UUID for voice image level 4</string> 9533 <string>Texture UUID for voice image level 4</string>
9015 <key>Persist</key> 9534 <key>Persist</key>
9016 <integer>1</integer> 9535 <integer>1</integer>
9017 <key>Type</key> 9536 <key>Type</key>
9018 <string>String</string> 9537 <string>String</string>
9019 <key>Value</key> 9538 <key>Value</key>
9020 <string>29de489d-0491-fb00-7dab-f9e686d31e83</string> 9539 <string>29de489d-0491-fb00-7dab-f9e686d31e83</string>
9021 </map> 9540 </map>
9022 <key>VoiceImageLevel5</key> 9541 <key>VoiceImageLevel5</key>
9023 <map> 9542 <map>
9024 <key>Comment</key> 9543 <key>Comment</key>
9025 <string>Texture UUID for voice image level 5</string> 9544 <string>Texture UUID for voice image level 5</string>
9026 <key>Persist</key> 9545 <key>Persist</key>
9027 <integer>1</integer> 9546 <integer>1</integer>
9028 <key>Type</key> 9547 <key>Type</key>
9029 <string>String</string> 9548 <string>String</string>
9030 <key>Value</key> 9549 <key>Value</key>
9031 <string>29de489d-0491-fb00-7dab-f9e686d31e83</string> 9550 <string>29de489d-0491-fb00-7dab-f9e686d31e83</string>
9032 </map> 9551 </map>
9033 <key>VoiceImageLevel6</key> 9552 <key>VoiceImageLevel6</key>
9034 <map> 9553 <map>
9035 <key>Comment</key> 9554 <key>Comment</key>
9036 <string>Texture UUID for voice image level 6</string> 9555 <string>Texture UUID for voice image level 6</string>
9037 <key>Persist</key> 9556 <key>Persist</key>
9038 <integer>1</integer> 9557 <integer>1</integer>
9039 <key>Type</key> 9558 <key>Type</key>
9040 <string>String</string> 9559 <string>String</string>
9041 <key>Value</key> 9560 <key>Value</key>
9042 <string>29de489d-0491-fb00-7dab-f9e686d31e83</string> 9561 <string>29de489d-0491-fb00-7dab-f9e686d31e83</string>
9043 </map> 9562 </map>
9044 <key>VoiceInputAudioDevice</key> 9563 <key>VoiceInputAudioDevice</key>
9045 <map> 9564 <map>
9046 <key>Comment</key> 9565 <key>Comment</key>
9047 <string>Audio input device to use for voice</string> 9566 <string>Audio input device to use for voice</string>
9048 <key>Persist</key> 9567 <key>Persist</key>
9049 <integer>1</integer> 9568 <integer>1</integer>
9050 <key>Type</key> 9569 <key>Type</key>
9051 <string>String</string> 9570 <string>String</string>
9052 <key>Value</key> 9571 <key>Value</key>
9053 <string>Default</string> 9572 <string>Default</string>
9054 </map> 9573 </map>
9055 <key>VoiceOutputAudioDevice</key> 9574 <key>VoiceOutputAudioDevice</key>
9056 <map> 9575 <map>
9057 <key>Comment</key> 9576 <key>Comment</key>
9058 <string>Audio output device to use for voice</string> 9577 <string>Audio output device to use for voice</string>
9059 <key>Persist</key> 9578 <key>Persist</key>
9060 <integer>1</integer> 9579 <integer>1</integer>
9061 <key>Type</key> 9580 <key>Type</key>
9062 <string>String</string> 9581 <string>String</string>
9063 <key>Value</key> 9582 <key>Value</key>
9064 <string>Default</string> 9583 <string>Default</string>
9065 </map> 9584 </map>
9066 <key>VoicePort</key> 9585 <key>VoicePort</key>
9067 <map> 9586 <map>
9068 <key>Comment</key> 9587 <key>Comment</key>
9069 <string>Client SLVoice port to connect to</string> 9588 <string>Client SLVoice port to connect to</string>
9070 <key>Persist</key> 9589 <key>Persist</key>
9071 <integer>1</integer> 9590 <integer>1</integer>
9072 <key>Type</key> 9591 <key>Type</key>
9073 <string>U32</string> 9592 <string>U32</string>
9074 <key>Value</key> 9593 <key>Value</key>
9075 <integer>44124</integer> 9594 <integer>44124</integer>
9076 </map> 9595 </map>
9596 <key>WLSkyDetail</key>
9597 <map>
9598 <key>Comment</key>
9599 <string>Controls vertex detail on the WindLight sky. Lower numbers will give better performance and uglier skies.</string>
9600 <key>Persist</key>
9601 <integer>1</integer>
9602 <key>Type</key>
9603 <string>U32</string>
9604 <key>Value</key>
9605 <integer>64</integer>
9606 </map>
9077 <key>WarnAboutBadPCI</key> 9607 <key>WarnAboutBadPCI</key>
9078 <map> 9608 <map>
9079 <key>Comment</key> 9609 <key>Comment</key>
9080 <string>Enables AboutBadPCI warning dialog</string> 9610 <string>Enables AboutBadPCI warning dialog</string>
9081 <key>Persist</key> 9611 <key>Persist</key>
9082 <integer>1</integer> 9612 <integer>1</integer>
9083 <key>Type</key> 9613 <key>Type</key>
9084 <string>Boolean</string> 9614 <string>Boolean</string>
9085 <key>Value</key> 9615 <key>Value</key>
9086 <integer>1</integer> 9616 <integer>1</integer>
9087 </map> 9617 </map>
9088 <key>WarnAboutDirectX9</key> 9618 <key>WarnAboutDirectX9</key>
9089 <map> 9619 <map>
9090 <key>Comment</key> 9620 <key>Comment</key>
9091 <string>Enables AboutDirectX9 warning dialog</string> 9621 <string>Enables AboutDirectX9 warning dialog</string>
9092 <key>Persist</key> 9622 <key>Persist</key>
9093 <integer>1</integer> 9623 <integer>1</integer>
9094 <key>Type</key> 9624 <key>Type</key>
9095 <string>Boolean</string> 9625 <string>Boolean</string>
9096 <key>Value</key> 9626 <key>Value</key>
9097 <integer>1</integer> 9627 <integer>1</integer>
9098 </map> 9628 </map>
9099 <key>WarnAboutOldGraphicsDriver</key> 9629 <key>WarnAboutOldGraphicsDriver</key>
9100 <map> 9630 <map>
9101 <key>Comment</key> 9631 <key>Comment</key>
9102 <string>Enables AboutOldGraphicsDriver warning dialog</string> 9632 <string>Enables AboutOldGraphicsDriver warning dialog</string>
9103 <key>Persist</key> 9633 <key>Persist</key>
9104 <integer>1</integer> 9634 <integer>1</integer>
9105 <key>Type</key> 9635 <key>Type</key>
9106 <string>Boolean</string> 9636 <string>Boolean</string>
9107 <key>Value</key> 9637 <key>Value</key>
9108 <integer>1</integer> 9638 <integer>1</integer>
9109 </map> 9639 </map>
9110 <key>WarnAboutPCIGraphics</key> 9640 <key>WarnAboutPCIGraphics</key>
9111 <map> 9641 <map>
9112 <key>Comment</key> 9642 <key>Comment</key>
9113 <string>Enables AboutPCIGraphics warning dialog</string> 9643 <string>Enables AboutPCIGraphics warning dialog</string>
9114 <key>Persist</key> 9644 <key>Persist</key>
9115 <integer>1</integer> 9645 <integer>1</integer>
9116 <key>Type</key> 9646 <key>Type</key>
9117 <string>Boolean</string> 9647 <string>Boolean</string>
9118 <key>Value</key> 9648 <key>Value</key>
9119 <integer>1</integer> 9649 <integer>1</integer>
9120 </map> 9650 </map>
9121 <key>WarnBrowserLaunch</key> 9651 <key>WarnBrowserLaunch</key>
9122 <map> 9652 <map>
9123 <key>Comment</key> 9653 <key>Comment</key>
9124 <string>Enables BrowserLaunch warning dialog</string> 9654 <string>Enables BrowserLaunch warning dialog</string>
9125 <key>Persist</key> 9655 <key>Persist</key>
9126 <integer>1</integer> 9656 <integer>1</integer>
9127 <key>Type</key> 9657 <key>Type</key>
9128 <string>Boolean</string> 9658 <string>Boolean</string>
9129 <key>Value</key> 9659 <key>Value</key>
9130 <integer>1</integer> 9660 <integer>1</integer>
9131 </map> 9661 </map>
9132 <key>WarnDeedObject</key> 9662 <key>WarnDeedObject</key>
9133 <map> 9663 <map>
9134 <key>Comment</key> 9664 <key>Comment</key>
9135 <string>Enables DeedObject warning dialog</string> 9665 <string>Enables DeedObject warning dialog</string>
9136 <key>Persist</key> 9666 <key>Persist</key>
9137 <integer>1</integer> 9667 <integer>1</integer>
9138 <key>Type</key> 9668 <key>Type</key>
9139 <string>Boolean</string> 9669 <string>Boolean</string>
9140 <key>Value</key> 9670 <key>Value</key>
9141 <integer>1</integer> 9671 <integer>1</integer>
9142 </map> 9672 </map>
9143 <key>WarnFirstAppearance</key> 9673 <key>WarnFirstAppearance</key>
9144 <map> 9674 <map>
9145 <key>Comment</key> 9675 <key>Comment</key>
9146 <string>Enables FirstAppearance warning dialog</string> 9676 <string>Enables FirstAppearance warning dialog</string>
9147 <key>Persist</key> 9677 <key>Persist</key>
9148 <integer>1</integer> 9678 <integer>1</integer>
9149 <key>Type</key> 9679 <key>Type</key>
9150 <string>Boolean</string> 9680 <string>Boolean</string>
9151 <key>Value</key> 9681 <key>Value</key>
9152 <integer>1</integer> 9682 <integer>1</integer>
9153 </map> 9683 </map>
9154 <key>WarnFirstMedia</key>
9155 <map>
9156 <key>Comment</key>
9157 <string>Enables FirstMedia warning dialog</string>
9158 <key>Persist</key>
9159 <integer>1</integer>
9160 <key>Type</key>
9161 <string>Boolean</string>
9162 <key>Value</key>
9163 <integer>1</integer>
9164 </map>
9165 <key>WarnFirstAttach</key> 9684 <key>WarnFirstAttach</key>
9166 <map> 9685 <map>
9167 <key>Comment</key> 9686 <key>Comment</key>
9168 <string>Enables FirstAttach warning dialog</string> 9687 <string>Enables FirstAttach warning dialog</string>
9169 <key>Persist</key> 9688 <key>Persist</key>
9170 <integer>1</integer> 9689 <integer>1</integer>
9171 <key>Type</key> 9690 <key>Type</key>
9172 <string>Boolean</string> 9691 <string>Boolean</string>
9173 <key>Value</key> 9692 <key>Value</key>
9174 <integer>1</integer> 9693 <integer>1</integer>
9175 </map> 9694 </map>
9176 <key>WarnFirstBalanceDecrease</key> 9695 <key>WarnFirstBalanceDecrease</key>
9177 <map> 9696 <map>
9178 <key>Comment</key> 9697 <key>Comment</key>
9179 <string>Enables FirstBalanceDecrease warning dialog</string> 9698 <string>Enables FirstBalanceDecrease warning dialog</string>
9180 <key>Persist</key> 9699 <key>Persist</key>
9181 <integer>1</integer> 9700 <integer>1</integer>
9182 <key>Type</key> 9701 <key>Type</key>
9183 <string>Boolean</string> 9702 <string>Boolean</string>
9184 <key>Value</key> 9703 <key>Value</key>
9185 <integer>1</integer> 9704 <integer>1</integer>
9186 </map> 9705 </map>
9187 <key>WarnFirstBalanceIncrease</key> 9706 <key>WarnFirstBalanceIncrease</key>
9188 <map> 9707 <map>
9189 <key>Comment</key> 9708 <key>Comment</key>
9190 <string>Enables FirstBalanceIncrease warning dialog</string> 9709 <string>Enables FirstBalanceIncrease warning dialog</string>
9191 <key>Persist</key> 9710 <key>Persist</key>
9192 <integer>1</integer> 9711 <integer>1</integer>
9193 <key>Type</key> 9712 <key>Type</key>
9194 <string>Boolean</string> 9713 <string>Boolean</string>
9195 <key>Value</key> 9714 <key>Value</key>
9196 <integer>1</integer> 9715 <integer>1</integer>
9197 </map> 9716 </map>
9198 <key>WarnFirstBuild</key> 9717 <key>WarnFirstBuild</key>
9199 <map> 9718 <map>
9200 <key>Comment</key> 9719 <key>Comment</key>
9201 <string>Enables FirstBuild warning dialog</string> 9720 <string>Enables FirstBuild warning dialog</string>
9202 <key>Persist</key> 9721 <key>Persist</key>
9203 <integer>1</integer> 9722 <integer>1</integer>
9204 <key>Type</key> 9723 <key>Type</key>
9205 <string>Boolean</string> 9724 <string>Boolean</string>
9206 <key>Value</key> 9725 <key>Value</key>
9207 <integer>1</integer> 9726 <integer>1</integer>
9208 </map> 9727 </map>
9209 <key>WarnFirstDebugMenus</key> 9728 <key>WarnFirstDebugMenus</key>
9210 <map> 9729 <map>
9211 <key>Comment</key> 9730 <key>Comment</key>
9212 <string>Enables FirstDebugMenus warning dialog</string> 9731 <string>Enables FirstDebugMenus warning dialog</string>
9213 <key>Persist</key> 9732 <key>Persist</key>
9214 <integer>1</integer> 9733 <integer>1</integer>
9215 <key>Type</key> 9734 <key>Type</key>
9216 <string>Boolean</string> 9735 <string>Boolean</string>
9217 <key>Value</key> 9736 <key>Value</key>
9218 <integer>1</integer> 9737 <integer>1</integer>
9219 </map> 9738 </map>
9220 <key>WarnFirstFlexible</key> 9739 <key>WarnFirstFlexible</key>
9221 <map> 9740 <map>
9222 <key>Comment</key> 9741 <key>Comment</key>
9223 <string>Enables FirstFlexible warning dialog</string> 9742 <string>Enables FirstFlexible warning dialog</string>
9224 <key>Persist</key> 9743 <key>Persist</key>
9225 <integer>1</integer> 9744 <integer>1</integer>
9226 <key>Type</key> 9745 <key>Type</key>
9227 <string>Boolean</string> 9746 <string>Boolean</string>
9228 <key>Value</key> 9747 <key>Value</key>
9229 <integer>1</integer> 9748 <integer>1</integer>
9230 </map> 9749 </map>
9231 <key>WarnFirstGoTo</key> 9750 <key>WarnFirstGoTo</key>
9232 <map> 9751 <map>
9233 <key>Comment</key> 9752 <key>Comment</key>
9234 <string>Enables FirstGoTo warning dialog</string> 9753 <string>Enables FirstGoTo warning dialog</string>
9235 <key>Persist</key> 9754 <key>Persist</key>
9236 <integer>1</integer> 9755 <integer>1</integer>
9237 <key>Type</key> 9756 <key>Type</key>
9238 <string>Boolean</string> 9757 <string>Boolean</string>
9239 <key>Value</key> 9758 <key>Value</key>
9240 <integer>1</integer> 9759 <integer>1</integer>
9241 </map> 9760 </map>
9242 <key>WarnFirstInventory</key> 9761 <key>WarnFirstInventory</key>
9243 <map> 9762 <map>
9244 <key>Comment</key> 9763 <key>Comment</key>
9245 <string>Enables FirstInventory warning dialog</string> 9764 <string>Enables FirstInventory warning dialog</string>
9246 <key>Persist</key> 9765 <key>Persist</key>
9247 <integer>1</integer> 9766 <integer>1</integer>
9248 <key>Type</key> 9767 <key>Type</key>
9249 <string>Boolean</string> 9768 <string>Boolean</string>
9250 <key>Value</key> 9769 <key>Value</key>
9251 <integer>1</integer> 9770 <integer>1</integer>
9252 </map> 9771 </map>
9253 <key>WarnFirstLeftClickNoHit</key> 9772 <key>WarnFirstLeftClickNoHit</key>
9254 <map> 9773 <map>
9255 <key>Comment</key> 9774 <key>Comment</key>
9256 <string>Enables FirstLeftClickNoHit warning dialog</string> 9775 <string>Enables FirstLeftClickNoHit warning dialog</string>
9257 <key>Persist</key> 9776 <key>Persist</key>
9258 <integer>1</integer> 9777 <integer>1</integer>
9259 <key>Type</key> 9778 <key>Type</key>
9260 <string>Boolean</string> 9779 <string>Boolean</string>
9261 <key>Value</key> 9780 <key>Value</key>
9262 <integer>1</integer> 9781 <integer>1</integer>
9263 </map> 9782 </map>
9264 <key>WarnFirstMap</key> 9783 <key>WarnFirstMap</key>
9265 <map> 9784 <map>
9266 <key>Comment</key> 9785 <key>Comment</key>
9267 <string>Enables FirstMap warning dialog</string> 9786 <string>Enables FirstMap warning dialog</string>
9268 <key>Persist</key> 9787 <key>Persist</key>
9269 <integer>1</integer> 9788 <integer>1</integer>
9270 <key>Type</key> 9789 <key>Type</key>
9271 <string>Boolean</string> 9790 <string>Boolean</string>
9272 <key>Value</key> 9791 <key>Value</key>
9273 <integer>1</integer> 9792 <integer>1</integer>
9274 </map> 9793 </map>
9275 <key>WarnFirstMedia</key> 9794 <key>WarnFirstMedia</key>
9276 <map> 9795 <map>
9277 <key>Comment</key> 9796 <key>Comment</key>
9278 <string>Enables FirstMedia warning dialog</string> 9797 <string>Enables FirstMedia warning dialog</string>
9279 <key>Persist</key> 9798 <key>Persist</key>
9280 <integer>1</integer> 9799 <integer>1</integer>
9281 <key>Type</key> 9800 <key>Type</key>
9282 <string>Boolean</string> 9801 <string>Boolean</string>
9283 <key>Value</key> 9802 <key>Value</key>
9284 <integer>1</integer> 9803 <integer>1</integer>
9285 </map> 9804 </map>
9286 <key>WarnFirstOverrideKeys</key> 9805 <key>WarnFirstOverrideKeys</key>
9287 <map> 9806 <map>
9288 <key>Comment</key> 9807 <key>Comment</key>
9289 <string>Enables FirstOverrideKeys warning dialog</string> 9808 <string>Enables FirstOverrideKeys warning dialog</string>
9290 <key>Persist</key> 9809 <key>Persist</key>
9291 <integer>1</integer> 9810 <integer>1</integer>
9292 <key>Type</key> 9811 <key>Type</key>
9293 <string>Boolean</string> 9812 <string>Boolean</string>
9294 <key>Value</key> 9813 <key>Value</key>
9295 <integer>1</integer> 9814 <integer>1</integer>
9296 </map> 9815 </map>
9297 <key>WarnFirstSandbox</key> 9816 <key>WarnFirstSandbox</key>
9298 <map> 9817 <map>
9299 <key>Comment</key> 9818 <key>Comment</key>
9300 <string>Enables FirstSandbox warning dialog</string> 9819 <string>Enables FirstSandbox warning dialog</string>
9301 <key>Persist</key> 9820 <key>Persist</key>
9302 <integer>1</integer> 9821 <integer>1</integer>
9303 <key>Type</key> 9822 <key>Type</key>
9304 <string>Boolean</string> 9823 <string>Boolean</string>
9305 <key>Value</key> 9824 <key>Value</key>
9306 <integer>1</integer> 9825 <integer>1</integer>
9307 </map> 9826 </map>
9308 <key>WarnFirstSculptedPrim</key> 9827 <key>WarnFirstSculptedPrim</key>
9309 <map> 9828 <map>
9310 <key>Comment</key> 9829 <key>Comment</key>
9311 <string>Enables FirstSculptedPrim warning dialog</string> 9830 <string>Enables FirstSculptedPrim warning dialog</string>
9312 <key>Persist</key> 9831 <key>Persist</key>
9313 <integer>1</integer> 9832 <integer>1</integer>
9314 <key>Type</key> 9833 <key>Type</key>
9315 <string>Boolean</string> 9834 <string>Boolean</string>
9316 <key>Value</key> 9835 <key>Value</key>
9317 <integer>1</integer> 9836 <integer>1</integer>
9318 </map> 9837 </map>
9319 <key>WarnFirstSit</key> 9838 <key>WarnFirstSit</key>
9320 <map> 9839 <map>
9321 <key>Comment</key> 9840 <key>Comment</key>
9322 <string>Enables FirstSit warning dialog</string> 9841 <string>Enables FirstSit warning dialog</string>
9323 <key>Persist</key> 9842 <key>Persist</key>
9324 <integer>1</integer> 9843 <integer>1</integer>
9325 <key>Type</key> 9844 <key>Type</key>
9326 <string>Boolean</string> 9845 <string>Boolean</string>
9327 <key>Value</key> 9846 <key>Value</key>
9328 <integer>1</integer> 9847 <integer>1</integer>
9329 </map> 9848 </map>
9330 <key>WarnFirstStreamingMusic</key> 9849 <key>WarnFirstStreamingMusic</key>
9331 <map> 9850 <map>
9332 <key>Comment</key> 9851 <key>Comment</key>
9333 <string>Enables FirstStreamingMusic warning dialog</string> 9852 <string>Enables FirstStreamingMusic warning dialog</string>
9334 <key>Persist</key> 9853 <key>Persist</key>
9335 <integer>1</integer> 9854 <integer>1</integer>
9336 <key>Type</key> 9855 <key>Type</key>
9337 <string>Boolean</string> 9856 <string>Boolean</string>
9338 <key>Value</key> 9857 <key>Value</key>
9339 <integer>1</integer> 9858 <integer>1</integer>
9340 </map> 9859 </map>
9341 <key>WarnFirstStreamingVideo</key> 9860 <key>WarnFirstStreamingVideo</key>
9342 <map> 9861 <map>
9343 <key>Comment</key> 9862 <key>Comment</key>
9344 <string>Enables FirstStreamingVideo warning dialog</string> 9863 <string>Enables FirstStreamingVideo warning dialog</string>
9345 <key>Persist</key> 9864 <key>Persist</key>
9346 <integer>1</integer> 9865 <integer>1</integer>
9347 <key>Type</key> 9866 <key>Type</key>
9348 <string>Boolean</string> 9867 <string>Boolean</string>
9349 <key>Value</key> 9868 <key>Value</key>
9350 <integer>1</integer> 9869 <integer>1</integer>
9351 </map> 9870 </map>
9352 <key>WarnFirstTeleport</key> 9871 <key>WarnFirstTeleport</key>
9353 <map> 9872 <map>
9354 <key>Comment</key> 9873 <key>Comment</key>
9355 <string>Enables FirstTeleport warning dialog</string> 9874 <string>Enables FirstTeleport warning dialog</string>
9356 <key>Persist</key> 9875 <key>Persist</key>
9357 <integer>1</integer> 9876 <integer>1</integer>
9358 <key>Type</key> 9877 <key>Type</key>
9359 <string>Boolean</string> 9878 <string>Boolean</string>
9360 <key>Value</key> 9879 <key>Value</key>
9361 <integer>1</integer> 9880 <integer>1</integer>
9362 </map> 9881 </map>
9363 <key>WarnFirstVoice</key> 9882 <key>WarnFirstVoice</key>
9364 <map> 9883 <map>
9365 <key>Comment</key> 9884 <key>Comment</key>
9366 <string>Enables FirstVoice warning dialog</string> 9885 <string>Enables FirstVoice warning dialog</string>
9367 <key>Persist</key> 9886 <key>Persist</key>
9368 <integer>1</integer> 9887 <integer>1</integer>
9369 <key>Type</key> 9888 <key>Type</key>
9370 <string>Boolean</string> 9889 <string>Boolean</string>
9371 <key>Value</key> 9890 <key>Value</key>
9372 <integer>1</integer> 9891 <integer>1</integer>
9373 </map> 9892 </map>
9374 <key>WarnNewClassified</key> 9893 <key>WarnNewClassified</key>
9375 <map> 9894 <map>
9376 <key>Comment</key> 9895 <key>Comment</key>
9377 <string>Enables NewClassified warning dialog</string> 9896 <string>Enables NewClassified warning dialog</string>
9378 <key>Persist</key> 9897 <key>Persist</key>
9379 <integer>1</integer> 9898 <integer>1</integer>
9380 <key>Type</key> 9899 <key>Type</key>
9381 <string>Boolean</string> 9900 <string>Boolean</string>
9382 <key>Value</key> 9901 <key>Value</key>
9383 <integer>1</integer> 9902 <integer>1</integer>
9384 </map> 9903 </map>
9385 <key>WarnQuickTimeInstalled</key> 9904 <key>WarnQuickTimeInstalled</key>
9386 <map> 9905 <map>
9387 <key>Comment</key> 9906 <key>Comment</key>
9388 <string>Enables QuickTimeInstalled warning dialog</string> 9907 <string>Enables QuickTimeInstalled warning dialog</string>
9389 <key>Persist</key> 9908 <key>Persist</key>
9390 <integer>1</integer> 9909 <integer>1</integer>
9391 <key>Type</key> 9910 <key>Type</key>
9392 <string>Boolean</string> 9911 <string>Boolean</string>
9393 <key>Value</key> 9912 <key>Value</key>
9394 <integer>1</integer> 9913 <integer>1</integer>
9395 </map> 9914 </map>
9396 <key>WarnReturnToOwner</key> 9915 <key>WarnReturnToOwner</key>
9397 <map> 9916 <map>
9398 <key>Comment</key> 9917 <key>Comment</key>
9399 <string>Enables ReturnToOwner warning dialog</string> 9918 <string>Enables ReturnToOwner warning dialog</string>
9400 <key>Persist</key> 9919 <key>Persist</key>
9401 <integer>1</integer> 9920 <integer>1</integer>
9402 <key>Type</key> 9921 <key>Type</key>
9403 <string>Boolean</string> 9922 <string>Boolean</string>
9404 <key>Value</key> 9923 <key>Value</key>
9405 <integer>1</integer> 9924 <integer>1</integer>
9406 </map> 9925 </map>
9407 <key>WindLightUseAtmosShaders</key> 9926 <key>WatchdogEnabled</key>
9408 <map> 9927 <map>
9409 <key>Comment</key> 9928 <key>Comment</key>
9410 <string>Whether to enable or disable WindLight atmospheric shaders.</string> 9929 <string>Controls whether the thread watchdog timer is activated.</string>
9411 <key>Persist</key> 9930 <key>Persist</key>
9412 <integer>1</integer> 9931 <integer>1</integer>
9413 <key>Type</key> 9932 <key>Type</key>
9414 <string>Boolean</string> 9933 <string>Boolean</string>
9415 <key>Value</key> 9934 <key>Value</key>
9416 <integer>1</integer> 9935 <integer>1</integer>
9417 </map> 9936 </map>
9937 <key>WaterEditPresets</key>
9938 <map>
9939 <key>Comment</key>
9940 <string>Whether to be able to edit the water defaults or not</string>
9941 <key>Persist</key>
9942 <integer>1</integer>
9943 <key>Type</key>
9944 <string>Boolean</string>
9945 <key>Value</key>
9946 <integer>0</integer>
9947 </map>
9948 <key>WaterGLFogDensityScale</key>
9949 <map>
9950 <key>Comment</key>
9951 <string>Maps shader water fog density to gl fog density</string>
9952 <key>Persist</key>
9953 <integer>1</integer>
9954 <key>Type</key>
9955 <string>F32</string>
9956 <key>Value</key>
9957 <real>0.02</real>
9958 </map>
9959 <key>WaterGLFogDepthFloor</key>
9960 <map>
9961 <key>Comment</key>
9962 <string>Controls how dark water gl fog can get</string>
9963 <key>Persist</key>
9964 <integer>1</integer>
9965 <key>Type</key>
9966 <string>F32</string>
9967 <key>Value</key>
9968 <real>0.25</real>
9969 </map>
9970 <key>WaterGLFogDepthScale</key>
9971 <map>
9972 <key>Comment</key>
9973 <string>Controls how quickly gl fog gets dark under water</string>
9974 <key>Persist</key>
9975 <integer>1</integer>
9976 <key>Type</key>
9977 <string>F32</string>
9978 <key>Value</key>
9979 <real>50.0</real>
9980 </map>
9981 <key>WindLightUseAtmosShaders</key>
9982 <map>
9983 <key>Comment</key>
9984 <string>Whether to enable or disable WindLight atmospheric shaders.</string>
9985 <key>Persist</key>
9986 <integer>1</integer>
9987 <key>Type</key>
9988 <string>Boolean</string>
9989 <key>Value</key>
9990 <integer>1</integer>
9991 </map>
9418 <key>WindowHeight</key> 9992 <key>WindowHeight</key>
9419 <map> 9993 <map>
9420 <key>Comment</key> 9994 <key>Comment</key>
9421 <string>SL viewer window height</string> 9995 <string>SL viewer window height</string>
9422 <key>Persist</key> 9996 <key>Persist</key>
9423 <integer>1</integer> 9997 <integer>1</integer>
9424 <key>Type</key> 9998 <key>Type</key>
9425 <string>S32</string> 9999 <string>S32</string>
9426 <key>Value</key> 10000 <key>Value</key>
9427 <integer>700</integer> 10001 <integer>700</integer>
9428 </map> 10002 </map>
9429 <key>WindowMaximized</key> 10003 <key>WindowMaximized</key>
9430 <map> 10004 <map>
9431 <key>Comment</key> 10005 <key>Comment</key>
9432 <string>SL viewer window maximized on login</string> 10006 <string>SL viewer window maximized on login</string>
9433 <key>Persist</key> 10007 <key>Persist</key>
9434 <integer>1</integer> 10008 <integer>1</integer>
9435 <key>Type</key> 10009 <key>Type</key>
9436 <string>Boolean</string> 10010 <string>Boolean</string>
9437 <key>Value</key> 10011 <key>Value</key>
9438 <integer>1</integer> 10012 <integer>1</integer>
9439 </map> 10013 </map>
9440 <key>WindowWidth</key> 10014 <key>WindowWidth</key>
9441 <map> 10015 <map>
9442 <key>Comment</key> 10016 <key>Comment</key>
9443 <string>SL viewer window width</string> 10017 <string>SL viewer window width</string>
9444 <key>Persist</key> 10018 <key>Persist</key>
9445 <integer>1</integer> 10019 <integer>1</integer>
9446 <key>Type</key> 10020 <key>Type</key>
9447 <string>S32</string> 10021 <string>S32</string>
9448 <key>Value</key> 10022 <key>Value</key>
9449 <integer>1000</integer> 10023 <integer>1000</integer>
9450 </map> 10024 </map>
9451 <key>WindowX</key> 10025 <key>WindowX</key>
9452 <map> 10026 <map>
9453 <key>Comment</key> 10027 <key>Comment</key>
9454 <string>X coordinate of lower left corner of SL viewer window, relative to primary display (pixels)</string> 10028 <string>X coordinate of lower left corner of SL viewer window, relative to primary display (pixels)</string>
9455 <key>Persist</key> 10029 <key>Persist</key>
9456 <integer>1</integer> 10030 <integer>1</integer>
9457 <key>Type</key> 10031 <key>Type</key>
9458 <string>S32</string> 10032 <string>S32</string>
9459 <key>Value</key> 10033 <key>Value</key>
9460 <integer>10</integer> 10034 <integer>10</integer>
9461 </map> 10035 </map>
9462 <key>WindowY</key> 10036 <key>WindowY</key>
9463 <map> 10037 <map>
9464 <key>Comment</key> 10038 <key>Comment</key>
9465 <string>Y coordinate of lower left corner of SL viewer window, relative to primary display (pixels)</string> 10039 <string>Y coordinate of lower left corner of SL viewer window, relative to primary display (pixels)</string>
9466 <key>Persist</key> 10040 <key>Persist</key>
9467 <integer>1</integer> 10041 <integer>1</integer>
9468 <key>Type</key> 10042 <key>Type</key>
9469 <string>S32</string> 10043 <string>S32</string>
9470 <key>Value</key> 10044 <key>Value</key>
9471 <integer>10</integer> 10045 <integer>10</integer>
9472 </map> 10046 </map>
9473 <key>WLSkyDetail</key>
9474 <map>
9475 <key>Comment</key>
9476 <string>Controls vertex detail on the WindLight sky. Lower numbers will give better performance and uglier skies.</string>
9477 <key>Persist</key>
9478 <integer>1</integer>
9479 <key>Type</key>
9480 <string>U32</string>
9481 <key>Value</key>
9482 <integer>64</integer>
9483 </map>
9484 <key>XferThrottle</key> 10047 <key>XferThrottle</key>
9485 <map> 10048 <map>
9486 <key>Comment</key> 10049 <key>Comment</key>
9487 <string>Maximum allowable downstream bandwidth for asset transfers (bits per second)</string> 10050 <string>Maximum allowable downstream bandwidth for asset transfers (bits per second)</string>
9488 <key>Persist</key> 10051 <key>Persist</key>
9489 <integer>1</integer> 10052 <integer>1</integer>
9490 <key>Type</key> 10053 <key>Type</key>
9491 <string>F32</string> 10054 <string>F32</string>
9492 <key>Value</key> 10055 <key>Value</key>
9493 <real>150000</real> 10056 <real>150000.0</real>
9494 </map> 10057 </map>
9495 <key>YawFromMousePosition</key> 10058 <key>YawFromMousePosition</key>
9496 <map> 10059 <map>
9497 <key>Comment</key> 10060 <key>Comment</key>
9498 <string>Horizontal range over which avatar head tracks mouse position (degrees of head rotation from left of window to right)</string> 10061 <string>Horizontal range over which avatar head tracks mouse position (degrees of head rotation from left of window to right)</string>
9499 <key>Persist</key> 10062 <key>Persist</key>
9500 <integer>1</integer> 10063 <integer>1</integer>
9501 <key>Type</key> 10064 <key>Type</key>
9502 <string>F32</string> 10065 <string>F32</string>
9503 <key>Value</key> 10066 <key>Value</key>
9504 <real>90</real> 10067 <real>90.0</real>
9505 </map> 10068 </map>
9506 <key>YieldTime</key> 10069 <key>YieldTime</key>
9507 <map> 10070 <map>
9508 <key>Comment</key> 10071 <key>Comment</key>
9509 <string>Yield some time to the local host.</string> 10072 <string>Yield some time to the local host.</string>
9510 <key>Persist</key> 10073 <key>Persist</key>
9511 <integer>1</integer> 10074 <integer>1</integer>
9512 <key>Type</key> 10075 <key>Type</key>
9513 <string>S32</string> 10076 <string>S32</string>
9514 <key>Value</key> 10077 <key>Value</key>
9515 <integer>-1</integer> 10078 <integer>-1</integer>
9516 </map> 10079 </map>
10080 <key>ZoomDirect</key>
10081 <map>
10082 <key>Comment</key>
10083 <string>Map Joystick zoom axis directly to camera zoom.</string>
10084 <key>Persist</key>
10085 <integer>1</integer>
10086 <key>Type</key>
10087 <string>Boolean</string>
10088 <key>Value</key>
10089 <integer>0</integer>
10090 </map>
9517 <key>ZoomTime</key> 10091 <key>ZoomTime</key>
9518 <map> 10092 <map>
9519 <key>Comment</key> 10093 <key>Comment</key>
9520 <string>Time of transition between different camera modes (seconds)</string> 10094 <string>Time of transition between different camera modes (seconds)</string>
9521 <key>Persist</key> 10095 <key>Persist</key>
9522 <integer>1</integer> 10096 <integer>1</integer>
9523 <key>Type</key> 10097 <key>Type</key>
9524 <string>F32</string> 10098 <string>F32</string>
9525 <key>Value</key> 10099 <key>Value</key>
9526 <real>0.4000000059604644775390625</real> 10100 <real>0.40000000596</real>
9527 </map> 10101 </map>
9528 <key>llOwnerSayChatColor</key> 10102 <key>llOwnerSayChatColor</key>
9529 <map> 10103 <map>
9530 <key>Comment</key> 10104 <key>Comment</key>
9531 <string>Color of chat messages from objects only visible to the owner</string> 10105 <string>Color of chat messages from objects only visible to the owner</string>
9532 <key>Persist</key> 10106 <key>Persist</key>
9533 <integer>1</integer> 10107 <integer>1</integer>
9534 <key>Type</key> 10108 <key>Type</key>
9535 <string>Color4</string> 10109 <string>Color4</string>
9536 <key>Value</key> 10110 <key>Value</key>
9537 <array> 10111 <array>
9538 <real>0.9900000095367431640625</real> 10112 <real>0.990000009537</real>
9539 <real>0.9900000095367431640625</real> 10113 <real>0.990000009537</real>
9540 <real>0.689999997615814208984375</real> 10114 <real>0.689999997616</real>
9541 <real>1</real> 10115 <real>1.0</real>
9542 </array> 10116 </array>
9543 </map> 10117 </map>
9544 <key>ParcelMediaAutoPlayEnable</key>
9545 <map>
9546 <key>Comment</key>
9547 <string>Auto play parcel media when available</string>
9548 <key>Persist</key>
9549 <integer>1</integer>
9550 <key>Type</key>
9551 <string>Boolean</string>
9552 <key>Value</key>
9553 <integer>0</integer>
9554 </map>
9555 <key>particlesbeacon</key> 10118 <key>particlesbeacon</key>
9556 <map> 10119 <map>
9557 <key>Comment</key> 10120 <key>Comment</key>
9558 <string>Beacon / Highlight particle generators</string> 10121 <string>Beacon / Highlight particle generators</string>
9559 <key>Persist</key> 10122 <key>Persist</key>
9560 <integer>1</integer> 10123 <integer>1</integer>
9561 <key>Type</key> 10124 <key>Type</key>
9562 <string>Boolean</string> 10125 <string>Boolean</string>
9563 <key>Value</key> 10126 <key>Value</key>
9564 <integer>0</integer> 10127 <integer>0</integer>
9565 </map> 10128 </map>
9566 <key>physicalbeacon</key> 10129 <key>physicalbeacon</key>
9567 <map> 10130 <map>
9568 <key>Comment</key> 10131 <key>Comment</key>
9569 <string>Beacon / Highlight physical objects</string> 10132 <string>Beacon / Highlight physical objects</string>
9570 <key>Persist</key> 10133 <key>Persist</key>
9571 <integer>1</integer> 10134 <integer>1</integer>
9572 <key>Type</key> 10135 <key>Type</key>
9573 <string>Boolean</string> 10136 <string>Boolean</string>
9574 <key>Value</key> 10137 <key>Value</key>
9575 <integer>1</integer> 10138 <integer>1</integer>
9576 </map> 10139 </map>
9577 <key>renderbeacons</key> 10140 <key>renderbeacons</key>
9578 <map> 10141 <map>
9579 <key>Comment</key> 10142 <key>Comment</key>
9580 <string>Beacon / Highlight particle generators</string> 10143 <string>Beacon / Highlight particle generators</string>
9581 <key>Persist</key> 10144 <key>Persist</key>
9582 <integer>1</integer> 10145 <integer>1</integer>
9583 <key>Type</key> 10146 <key>Type</key>
9584 <string>Boolean</string> 10147 <string>Boolean</string>
9585 <key>Value</key> 10148 <key>Value</key>
9586 <integer>0</integer> 10149 <integer>0</integer>
9587 </map> 10150 </map>
9588 <key>renderhighlights</key> 10151 <key>renderhighlights</key>
9589 <map> 10152 <map>
9590 <key>Comment</key> 10153 <key>Comment</key>
9591 <string>Beacon / Highlight scripted objects with touch function</string> 10154 <string>Beacon / Highlight scripted objects with touch function</string>
9592 <key>Persist</key> 10155 <key>Persist</key>
9593 <integer>1</integer> 10156 <integer>1</integer>
9594 <key>Type</key> 10157 <key>Type</key>
9595 <string>Boolean</string> 10158 <string>Boolean</string>
9596 <key>Value</key> 10159 <key>Value</key>
9597 <integer>1</integer> 10160 <integer>1</integer>
9598 </map> 10161 </map>
9599 <key>scriptsbeacon</key> 10162 <key>scriptsbeacon</key>
9600 <map> 10163 <map>
9601 <key>Comment</key> 10164 <key>Comment</key>
9602 <string>Beacon / Highlight scripted objects</string> 10165 <string>Beacon / Highlight scripted objects</string>
9603 <key>Persist</key> 10166 <key>Persist</key>
9604 <integer>1</integer> 10167 <integer>1</integer>
9605 <key>Type</key> 10168 <key>Type</key>
9606 <string>Boolean</string> 10169 <string>Boolean</string>
9607 <key>Value</key> 10170 <key>Value</key>
9608 <integer>0</integer> 10171 <integer>0</integer>
9609 </map> 10172 </map>
9610 <key>scripttouchbeacon</key> 10173 <key>scripttouchbeacon</key>
9611 <map> 10174 <map>
9612 <key>Comment</key> 10175 <key>Comment</key>
9613 <string>Beacon / Highlight scripted objects with touch function</string> 10176 <string>Beacon / Highlight scripted objects with touch function</string>
9614 <key>Persist</key> 10177 <key>Persist</key>
9615 <integer>1</integer> 10178 <integer>1</integer>
9616 <key>Type</key> 10179 <key>Type</key>
9617 <string>Boolean</string> 10180 <string>Boolean</string>
9618 <key>Value</key> 10181 <key>Value</key>
9619 <integer>1</integer> 10182 <integer>1</integer>
9620 </map> 10183 </map>
9621 <key>soundsbeacon</key> 10184 <key>soundsbeacon</key>
9622 <map> 10185 <map>
9623 <key>Comment</key> 10186 <key>Comment</key>
9624 <string>Beacon / Highlight sound generators</string> 10187 <string>Beacon / Highlight sound generators</string>
9625 <key>Persist</key> 10188 <key>Persist</key>
9626 <integer>1</integer> 10189 <integer>1</integer>
9627 <key>Type</key> 10190 <key>Type</key>
9628 <string>Boolean</string> 10191 <string>Boolean</string>
9629 <key>Value</key> 10192 <key>Value</key>
9630 <integer>0</integer> 10193 <integer>0</integer>
9631 </map>
9632 <key>SkyEditPresets</key>
9633 <map>
9634 <key>Comment</key>
9635 <string>Whether to be able to edit the sky defaults or not</string>
9636 <key>Persist</key>
9637 <integer>1</integer>
9638 <key>Type</key>
9639 <string>Boolean</string>
9640 <key>Value</key>
9641 <integer>0</integer>
9642 </map>
9643 <key>WaterGLFogDepthFloor</key>
9644 <map>
9645 <key>Comment</key>
9646 <string>Controls how dark water gl fog can get</string>
9647 <key>Persist</key>
9648 <integer>1</integer>
9649 <key>Type</key>
9650 <string>F32</string>
9651 <key>Value</key>
9652 <real>0.25</real>
9653 </map>
9654 <key>WaterGLFogDepthScale</key>
9655 <map>
9656 <key>Comment</key>
9657 <string>Controls how quickly gl fog gets dark under water</string>
9658 <key>Persist</key>
9659 <integer>1</integer>
9660 <key>Type</key>
9661 <string>F32</string>
9662 <key>Value</key>
9663 <real>50.0</real>
9664 </map>
9665 <key>WaterGLFogDensityScale</key>
9666 <map>
9667 <key>Comment</key>
9668 <string>Maps shader water fog density to gl fog density</string>
9669 <key>Persist</key>
9670 <integer>1</integer>
9671 <key>Type</key>
9672 <string>F32</string>
9673 <key>Value</key>
9674 <real>0.02</real>
9675 </map>
9676 <key>EnableRippleWater</key>
9677 <map>
9678 <key>Comment</key>
9679 <string>Whether to use ripple water shader or not</string>
9680 <key>Persist</key>
9681 <integer>1</integer>
9682 <key>Type</key>
9683 <string>Boolean</string>
9684 <key>Value</key>
9685 <integer>1</integer>
9686 </map>
9687 <key>WaterEditPresets</key>
9688 <map>
9689 <key>Comment</key>
9690 <string>Whether to be able to edit the water defaults or not</string>
9691 <key>Persist</key>
9692 <integer>1</integer>
9693 <key>Type</key>
9694 <string>Boolean</string>
9695 <key>Value</key>
9696 <integer>0</integer>
9697 </map>
9698 <key>FloaterEnvRect</key>
9699 <map>
9700 <key>Comment</key>
9701 <string>Rectangle for Environment Editor</string>
9702 <key>Persist</key>
9703 <integer>1</integer>
9704 <key>Type</key>
9705 <string>Rect</string>
9706 <key>Value</key>
9707 <array>
9708 <integer>50</integer>
9709 <integer>150</integer>
9710 <integer>650</integer>
9711 <integer>0</integer>
9712 </array>
9713 </map>
9714 <key>FloaterAdvancedSkyRect</key>
9715 <map>
9716 <key>Comment</key>
9717 <string>Rectangle for Advanced Sky Editor</string>
9718 <key>Persist</key>
9719 <integer>1</integer>
9720 <key>Type</key>
9721 <string>Rect</string>
9722 <key>Value</key>
9723 <array>
9724 <integer>50</integer>
9725 <integer>220</integer>
9726 <integer>450</integer>
9727 <integer>0</integer>
9728 </array>
9729 </map>
9730 <key>FloaterDayCycleRect</key>
9731 <map>
9732 <key>Comment</key>
9733 <string>Rectangle for Day Cycle Editor</string>
9734 <key>Persist</key>
9735 <integer>1</integer>
9736 <key>Type</key>
9737 <string>Rect</string>
9738 <key>Value</key>
9739 <array>
9740 <integer>50</integer>
9741 <integer>450</integer>
9742 <integer>300</integer>
9743 <integer>0</integer>
9744 </array>
9745 </map>
9746 <key>FloaterAdvancedWaterRect</key>
9747 <map>
9748 <key>Comment</key>
9749 <string>Rectangle for Advanced Water Editor</string>
9750 <key>Persist</key>
9751 <integer>1</integer>
9752 <key>Type</key>
9753 <string>Rect</string>
9754 <key>Value</key>
9755 <array>
9756 <integer>50</integer>
9757 <integer>220</integer>
9758 <integer>450</integer>
9759 <integer>0</integer>
9760 </array>
9761 </map>
9762 <key>RenderFastAlpha</key>
9763 <map>
9764 <key>Comment</key>
9765 <string>Use lossy alpha rendering optimization (opaque/nonexistent small alpha faces).</string>
9766 <key>Persist</key>
9767 <integer>1</integer>
9768 <key>Type</key>
9769 <string>Boolean</string>
9770 <key>Value</key>
9771 <integer>0</integer>
9772 </map>
9773 <key>RenderDeferred</key>
9774 <map>
9775 <key>Comment</key>
9776 <string>Use deferred rendering pipeline.</string>
9777 <key>Persist</key>
9778 <integer>1</integer>
9779 <key>Type</key>
9780 <string>Boolean</string>
9781 <key>Value</key>
9782 <integer>0</integer>
9783 </map>
9784 <key>RenderFSAASamples</key>
9785 <map>
9786 <key>Comment</key>
9787 <string>Number of samples to use for FSAA (0 = no AA).</string>
9788 <key>Persist</key>
9789 <integer>1</integer>
9790 <key>Type</key>
9791 <string>U32</string>
9792 <key>Value</key>
9793 <integer>0</integer>
9794 </map>
9795 <key>RenderTextureMemoryMultiple</key>
9796 <map>
9797 <key>Comment</key>
9798 <string>Multiple of texture memory value to use (should fit: 0 &lt; value &lt;= 1.0)</string>
9799 <key>Persist</key>
9800 <integer>1</integer>
9801 <key>Type</key>
9802 <string>F32</string>
9803 <key>Value</key>
9804 <real>1.0</real>
9805 </map>
9806 <key>Disregard128DefaultDrawDistance</key>
9807 <map>
9808 <key>Comment</key>
9809 <string>Whether to use the auto default to 128 draw distance</string>
9810 <key>Persist</key>
9811 <integer>1</integer>
9812 <key>Type</key>
9813 <string>Boolean</string>
9814 <key>Value</key>
9815 <real>1</real>
9816 </map>
9817 <key>Disregard96DefaultDrawDistance</key>
9818 <map>
9819 <key>Comment</key>
9820 <string>Whether to use the auto default to 96 draw distance</string>
9821 <key>Persist</key>
9822 <integer>1</integer>
9823 <key>Type</key>
9824 <string>Boolean</string>
9825 <key>Value</key>
9826 <real>1</real>
9827 </map>
9828
9829 <key>AvatarAxisDeadZone0</key>
9830 <map>
9831 <key>Comment</key>
9832 <string>Avatar axis 0 dead zone.</string>
9833 <key>Persist</key>
9834 <integer>1</integer>
9835 <key>Type</key>
9836 <string>F32</string>
9837 <key>Value</key>
9838 <real>0.1</real>
9839 </map>
9840 <key>AvatarAxisDeadZone1</key>
9841 <map>
9842 <key>Comment</key>
9843 <string>Avatar axis 1 dead zone.</string>
9844 <key>Persist</key>
9845 <integer>1</integer>
9846 <key>Type</key>
9847 <string>F32</string>
9848 <key>Value</key>
9849 <real>0.1</real>
9850 </map>
9851 <key>AvatarAxisDeadZone2</key>
9852 <map>
9853 <key>Comment</key>
9854 <string>Avatar axis 2 dead zone.</string>
9855 <key>Persist</key>
9856 <integer>1</integer>
9857 <key>Type</key>
9858 <string>F32</string>
9859 <key>Value</key>
9860 <real>0.1</real>
9861 </map>
9862 <key>AvatarAxisDeadZone3</key>
9863 <map>
9864 <key>Comment</key>
9865 <string>Avatar axis 3 dead zone.</string>
9866 <key>Persist</key>
9867 <integer>1</integer>
9868 <key>Type</key>
9869 <string>F32</string>
9870 <key>Value</key>
9871 <real>0.1</real>
9872 </map>
9873 <key>AvatarAxisDeadZone4</key>
9874 <map>
9875 <key>Comment</key>
9876 <string>Avatar axis 4 dead zone.</string>
9877 <key>Persist</key>
9878 <integer>1</integer>
9879 <key>Type</key>
9880 <string>F32</string>
9881 <key>Value</key>
9882 <real>0.1</real>
9883 </map>
9884 <key>AvatarAxisDeadZone5</key>
9885 <map>
9886 <key>Comment</key>
9887 <string>Avatar axis 5 dead zone.</string>
9888 <key>Persist</key>
9889 <integer>1</integer>
9890 <key>Type</key>
9891 <string>F32</string>
9892 <key>Value</key>
9893 <real>0.1</real>
9894 </map>
9895 <key>AvatarAxisScale0</key>
9896 <map>
9897 <key>Comment</key>
9898 <string>Avatar axis 0 scaler.</string>
9899 <key>Persist</key>
9900 <integer>1</integer>
9901 <key>Type</key>
9902 <string>F32</string>
9903 <key>Value</key>
9904 <real>1</real>
9905 </map>
9906 <key>AvatarAxisScale1</key>
9907 <map>
9908 <key>Comment</key>
9909 <string>Avatar axis 1 scaler.</string>
9910 <key>Persist</key>
9911 <integer>1</integer>
9912 <key>Type</key>
9913 <string>F32</string>
9914 <key>Value</key>
9915 <real>1</real>
9916 </map>
9917 <key>AvatarAxisScale2</key>
9918 <map>
9919 <key>Comment</key>
9920 <string>Avatar axis 2 scaler.</string>
9921 <key>Persist</key>
9922 <integer>1</integer>
9923 <key>Type</key>
9924 <string>F32</string>
9925 <key>Value</key>
9926 <real>1</real>
9927 </map>
9928 <key>AvatarAxisScale3</key>
9929 <map>
9930 <key>Comment</key>
9931 <string>Avatar axis 3 scaler.</string>
9932 <key>Persist</key>
9933 <integer>1</integer>
9934 <key>Type</key>
9935 <string>F32</string>
9936 <key>Value</key>
9937 <real>1</real>
9938 </map>
9939 <key>AvatarAxisScale4</key>
9940 <map>
9941 <key>Comment</key>
9942 <string>Avatar axis 4 scaler.</string>
9943 <key>Persist</key>
9944 <integer>1</integer>
9945 <key>Type</key>
9946 <string>F32</string>
9947 <key>Value</key>
9948 <real>1</real>
9949 </map>
9950 <key>AvatarAxisScale5</key>
9951 <map>
9952 <key>Comment</key>
9953 <string>Avatar axis 5 scaler.</string>
9954 <key>Persist</key>
9955 <integer>1</integer>
9956 <key>Type</key>
9957 <string>F32</string>
9958 <key>Value</key>
9959 <real>1</real>
9960 </map>
9961 <key>AvatarFeathering</key>
9962 <map>
9963 <key>Comment</key>
9964 <string>Avatar feathering (less is softer)</string>
9965 <key>Persist</key>
9966 <integer>1</integer>
9967 <key>Type</key>
9968 <string>F32</string>
9969 <key>Value</key>
9970 <real>16</real>
9971 </map>
9972
9973 <key>BuildAxisDeadZone0</key>
9974 <map>
9975 <key>Comment</key>
9976 <string>Build axis 0 dead zone.</string>
9977 <key>Persist</key>
9978 <integer>1</integer>
9979 <key>Type</key>
9980 <string>F32</string>
9981 <key>Value</key>
9982 <real>0.1</real>
9983 </map>
9984 <key>BuildAxisDeadZone1</key>
9985 <map>
9986 <key>Comment</key>
9987 <string>Build axis 1 dead zone.</string>
9988 <key>Persist</key>
9989 <integer>1</integer>
9990 <key>Type</key>
9991 <string>F32</string>
9992 <key>Value</key>
9993 <real>0.1</real>
9994 </map>
9995 <key>BuildAxisDeadZone2</key>
9996 <map>
9997 <key>Comment</key>
9998 <string>Build axis 2 dead zone.</string>
9999 <key>Persist</key>
10000 <integer>1</integer>
10001 <key>Type</key>
10002 <string>F32</string>
10003 <key>Value</key>
10004 <real>0.1</real>
10005 </map>
10006 <key>BuildAxisDeadZone3</key>
10007 <map>
10008 <key>Comment</key>
10009 <string>Build axis 3 dead zone.</string>
10010 <key>Persist</key>
10011 <integer>1</integer>
10012 <key>Type</key>
10013 <string>F32</string>
10014 <key>Value</key>
10015 <real>0.1</real>
10016 </map>
10017 <key>BuildAxisDeadZone4</key>
10018 <map>
10019 <key>Comment</key>
10020 <string>Build axis 4 dead zone.</string>
10021 <key>Persist</key>
10022 <integer>1</integer>
10023 <key>Type</key>
10024 <string>F32</string>
10025 <key>Value</key>
10026 <real>0.1</real>
10027 </map>
10028 <key>BuildAxisDeadZone5</key>
10029 <map>
10030 <key>Comment</key>
10031 <string>Build axis 5 dead zone.</string>
10032 <key>Persist</key>
10033 <integer>1</integer>
10034 <key>Type</key>
10035 <string>F32</string>
10036 <key>Value</key>
10037 <real>0.1</real>
10038 </map>
10039 <key>BuildAxisScale0</key>
10040 <map>
10041 <key>Comment</key>
10042 <string>Build axis 0 scaler.</string>
10043 <key>Persist</key>
10044 <integer>1</integer>
10045 <key>Type</key>
10046 <string>F32</string>
10047 <key>Value</key>
10048 <real>1</real>
10049 </map>
10050 <key>BuildAxisScale1</key>
10051 <map>
10052 <key>Comment</key>
10053 <string>Build axis 1 scaler.</string>
10054 <key>Persist</key>
10055 <integer>1</integer>
10056 <key>Type</key>
10057 <string>F32</string>
10058 <key>Value</key>
10059 <real>1</real>
10060 </map>
10061 <key>BuildAxisScale2</key>
10062 <map>
10063 <key>Comment</key>
10064 <string>Build axis 2 scaler.</string>
10065 <key>Persist</key>
10066 <integer>1</integer>
10067 <key>Type</key>
10068 <string>F32</string>
10069 <key>Value</key>
10070 <real>1</real>
10071 </map>
10072 <key>BuildAxisScale3</key>
10073 <map>
10074 <key>Comment</key>
10075 <string>Build axis 3 scaler.</string>
10076 <key>Persist</key>
10077 <integer>1</integer>
10078 <key>Type</key>
10079 <string>F32</string>
10080 <key>Value</key>
10081 <real>1</real>
10082 </map>
10083 <key>BuildAxisScale4</key>
10084 <map>
10085 <key>Comment</key>
10086 <string>Build axis 4 scaler.</string>
10087 <key>Persist</key>
10088 <integer>1</integer>
10089 <key>Type</key>
10090 <string>F32</string>
10091 <key>Value</key>
10092 <real>1</real>
10093 </map>
10094 <key>BuildAxisScale5</key>
10095 <map>
10096 <key>Comment</key>
10097 <string>Build axis 5 scaler.</string>
10098 <key>Persist</key>
10099 <integer>1</integer>
10100 <key>Type</key>
10101 <string>F32</string>
10102 <key>Value</key>
10103 <real>1</real>
10104 </map>
10105 <key>BuildFeathering</key>
10106 <map>
10107 <key>Comment</key>
10108 <string>Build feathering (less is softer)</string>
10109 <key>Persist</key>
10110 <integer>1</integer>
10111 <key>Type</key>
10112 <string>F32</string>
10113 <key>Value</key>
10114 <real>16</real>
10115 </map>
10116
10117 </map> 10194 </map>
10195 </map>
10118</llsd> 10196</llsd>
diff --git a/linden/indra/newview/app_settings/skinned_avatar.vp b/linden/indra/newview/app_settings/skinned_avatar.vp
deleted file mode 100644
index a4adbd5..0000000
--- a/linden/indra/newview/app_settings/skinned_avatar.vp
+++ /dev/null
@@ -1,146 +0,0 @@
1!!ARBvp1.0
2# Vertex Program for lit, skinned avatars
3
4# Parameters
5PARAM mat[45] = { program.env[0..44] };
6PARAM embossScale = program.env[63];
7PARAM proj[4] = { state.matrix.projection };
8PARAM modelAmbient = state.lightmodel.ambient;
9PARAM materialDiffuse = state.material.diffuse;
10PARAM lightDir0 = state.light[0].position;
11PARAM diffuseCol0 = state.light[0].diffuse;
12PARAM lightDir1 = state.light[1].position;
13PARAM diffuseCol1 = state.light[1].diffuse;
14PARAM lightPos2 = state.light[2].position;
15PARAM diffuseCol2 = state.light[2].diffuse;
16PARAM lightPos3 = state.light[3].position;
17PARAM diffuseCol3 = state.light[3].diffuse;
18
19# Per vertex inputs
20ATTRIB iPos = vertex.position;
21ATTRIB iNormal = vertex.normal;
22ATTRIB iTex0 = vertex.texcoord[0];
23ATTRIB iTex1 = vertex.texcoord[1];
24ATTRIB iWeight = vertex.attrib[1];
25ATTRIB iBinormal = vertex.attrib[6];
26
27# Temporaries
28TEMP blendBinorm; # result of skinned binormal
29TEMP blendTangent; # result of skinned tangent
30TEMP blendMat;
31TEMP blendPos; # skinned vertex pos
32TEMP dots; # dot product for lighting calculations
33TEMP blendNorm; # skinned normal
34TEMP colorAcc; # color accumulator
35
36ALIAS scaledWeight = colorAcc;
37ALIAS divisor = blendMat; # divisor for normalization process
38ALIAS lightDir = blendBinorm;
39
40ADDRESS address;
41
42# Outputs
43OUTPUT oPos = result.position; #position
44OUTPUT oCol0 = result.color; #primary color
45OUTPUT oTex0 = result.texcoord[0]; #texture coordinate set 0
46OUTPUT oTex1 = result.texcoord[1]; #texture coordinate set 1
47OUTPUT oFog = result.fogcoord; #output fog coord
48
49#fix input blending weight
50ARL address.x, iWeight.x;
51FRC scaledWeight.x, iWeight;
52
53#Output position and normal
54MUL dots, mat[address.x + 1], {1,1,1,1};
55SUB blendMat, dots, mat[address.x + 0];
56MAD blendMat, scaledWeight.x, blendMat, mat[address.x + 0];
57DP4 blendPos.x, blendMat, iPos;
58DP3 blendNorm.x, blendMat, iNormal;
59DP3 blendBinorm.x, blendMat, iBinormal;
60
61MUL dots, mat[address.x + 16], {1,1,1,1};
62SUB blendMat, dots, mat[address.x + 15];
63MAD blendMat, scaledWeight.x, blendMat, mat[address.x + 15];
64DP4 blendPos.y, blendMat, iPos;
65DP3 blendNorm.y, blendMat, iNormal;
66DP3 blendBinorm.y, blendMat, iBinormal;
67
68MUL dots, mat[address.x + 31], {1,1,1,1};
69SUB blendMat, dots, mat[address.x + 30];
70MAD blendMat, scaledWeight.x, blendMat, mat[address.x + 30];
71DP4 blendPos.z, blendMat, iPos;
72DP3 blendNorm.z, blendMat, iNormal;
73DP3 blendBinorm.z, blendMat, iBinormal;
74MOV blendPos.w, {0, 0, 0, 1};
75
76#renormalize normal
77#add "normal spread" effect
78ADD blendNorm, blendNorm, {0, 0, -0.4, 0};
79DP3 divisor.w, blendNorm, blendNorm;
80RSQ divisor.xyz, divisor.w;
81MUL blendNorm.xyz, blendNorm, divisor;
82
83#renormalize binormal
84DP3 divisor.w, blendBinorm, blendBinorm;
85RSQ divisor.xyz, divisor.w;
86MUL blendBinorm.xyz, blendBinorm, divisor;
87
88#Projection
89DP4 oPos.x, proj[0], blendPos;
90DP4 oPos.y, proj[1], blendPos;
91DP4 oPos.z, proj[2], blendPos;
92DP4 oPos.w, proj[3], blendPos;
93
94#tangent = binormal X normal
95XPD blendTangent, blendNorm, blendBinorm;
96
97#oTex1 = iTex0 + LLVector2( lightDir0 * tangent, lightDir0 * binormal );
98DP3 blendTangent.x, lightDir0, blendTangent;
99DP3 blendTangent.y, lightDir0, blendBinorm;
100MAD oTex1, embossScale.x, blendTangent, iTex0;
101
102#Light 0
103DP3 colorAcc.xyz, blendNorm, lightDir0;
104MAD colorAcc.xyz, colorAcc, {0.55, 0.55, 0.55, 0.55}, {0.3, 0.3, 0.3, 0.3};
105MAX colorAcc, colorAcc, {0, 0, 0, 0};
106
107# Accumulate color contributions.
108MAD colorAcc.xyz, colorAcc.x, diffuseCol0, modelAmbient;
109MOV colorAcc.w, {0, 0, 0, 1.0};
110
111#Light 1
112DP3 dots.x, blendNorm, lightDir1;
113
114#Light 2
115SUB lightDir, lightPos2, blendPos;
116DP3 divisor.w, lightDir, lightDir;
117RSQ divisor.xyz, divisor.w;
118MUL lightDir.xyz, lightDir, divisor;
119
120DP3 dots.y, blendNorm, lightDir;
121
122#Light 3
123SUB lightDir, lightPos3, blendPos;
124DP3 divisor.w, lightDir, lightDir;
125RSQ divisor.xyz, divisor.w;
126MUL lightDir.xyz, lightDir, divisor;
127
128DP3 dots.z, blendNorm, lightDir;
129
130# Apply Lights
131MAD dots, dots, {0.55, 0.55, 0.55, 0.55}, {0.3, 0.3, 0.3, 0.3};
132MAX dots, dots, {0,0,0,0};
133MAD colorAcc.xyz, dots.x, diffuseCol1, colorAcc;
134MAD colorAcc.xyz, dots.y, diffuseCol2, colorAcc;
135MAD colorAcc.xyz, dots.z, diffuseCol3, colorAcc;
136
137#Output color
138MUL oCol0, materialDiffuse, colorAcc;
139
140#Output tex coordinate
141MOV oTex0, iTex0;
142
143#Output fog
144MOV oFog.x, blendPos.z;
145
146END
diff --git a/linden/indra/newview/app_settings/skinned_avatar_hair_wind.vp b/linden/indra/newview/app_settings/skinned_avatar_hair_wind.vp
deleted file mode 100644
index 5c45118..0000000
--- a/linden/indra/newview/app_settings/skinned_avatar_hair_wind.vp
+++ /dev/null
@@ -1,179 +0,0 @@
1!!ARBvp1.0
2# Vertex Program for lit, skinned avatars
3
4# Parameters
5#PARAM gGravity = program.env[62];
6
7PARAM gMat[45] = { program.env[0..44] };
8PARAM gWindDir = program.env[60]; # wind direction with strength stored in w
9PARAM gSinWaveParams = program.env[61]; # frequency, frequency2, frequency, phase
10PARAM gMinMaxConstants = {1.0, 0.166666, 0.0083143, .00018542}; #minimax-generated coefficients
11PARAM gPiConstants = {0.159154943, 6.28318530, 3.141592653, 1.5707963}; # {1/2PI, 2PI, PI, PI/2}
12PARAM gProjection[4] = { state.matrix.projection };
13PARAM gModelAmbient = state.lightmodel.ambient;
14PARAM gMaterialDiffuse = state.material.diffuse;
15PARAM gLightDir0 = state.light[0].position;
16PARAM gDiffuseCol0 = state.light[0].diffuse;
17PARAM gLightDir1 = state.light[1].position;
18PARAM gDiffuseCol1 = state.light[1].diffuse;
19PARAM gLightPos2 = state.light[2].position;
20PARAM gDiffuseCol2 = state.light[2].diffuse;
21PARAM gLightPos3 = state.light[3].position;
22PARAM gDiffuseCol3 = state.light[3].diffuse;
23
24# Per vertex inputs
25ATTRIB iPos = vertex.position;
26ATTRIB iNormal = vertex.normal;
27ATTRIB iTex0 = vertex.texcoord;
28ATTRIB iWeight = vertex.attrib[1];
29ATTRIB iClothing = vertex.attrib[4];
30
31# Temporaries
32TEMP blendedPos; # weighted sum of tpos0 and tpos1
33TEMP blendNorm; # weighted sum of eyeNormal0 and eyeNormal1
34TEMP temp0;
35TEMP temp1; # another general purpose temp
36TEMP temp2;
37TEMP windEffect; # amount of displacement from wind
38TEMP blendMatX;
39TEMP blendMatY;
40TEMP blendMatZ;
41
42ALIAS colorAcc = temp0;
43ALIAS sinWave = temp0;
44ALIAS offsetPos = temp1;
45ALIAS dots = temp1; # dot product for lighting calculations
46ALIAS posDelta = windEffect; # movement of vertex according to joint angle
47ALIAS pivot_pos = windEffect;
48ALIAS scaledWeight = temp0;
49ALIAS divisor = temp2;
50ALIAS lightDir = windEffect;
51
52ADDRESS address;
53
54# Outputs
55OUTPUT oPos = result.position; # position
56OUTPUT oCol0 = result.color; # primary color
57OUTPUT oTex0 = result.texcoord; # texture coordinate set 0
58OUTPUT oFog = result.fogcoord; # output fog coordinates
59
60#fix input blending weight
61ARL address.x, iWeight.x;
62FRC scaledWeight.x, iWeight;
63
64# Blend joint matrices
65MUL blendMatX, gMat[address.x + 1], {1,1,1,1};
66SUB blendMatX, blendMatX, gMat[address.x + 0];
67MAD blendMatX, scaledWeight.x, blendMatX, gMat[address.x + 0];
68DP3 blendNorm.x, blendMatX, iNormal;
69
70MUL blendMatY, gMat[address.x + 16], {1,1,1,1};
71SUB blendMatY, blendMatY, gMat[address.x + 15];
72MAD blendMatY, scaledWeight.x, blendMatY, gMat[address.x + 15];
73DP3 blendNorm.y, blendMatY, iNormal;
74
75MUL blendMatZ, gMat[address.x + 31], {1,1,1,1};
76SUB blendMatZ, blendMatZ, gMat[address.x + 30];
77MAD blendMatZ, scaledWeight.x, blendMatZ, gMat[address.x + 30];
78DP3 blendNorm.z, blendMatZ, iNormal;
79
80#wind
81DP3 windEffect, blendNorm, gWindDir;
82MAD windEffect.xyz, windEffect, gSinWaveParams, gSinWaveParams.w; # use sin wave params to scale and offset input
83
84#reduce to period of 2 PI
85MUL temp1.xyz, windEffect, gPiConstants.x; # change input as multiple of [0-2PI] to [0-1]
86EXP temp0, temp1.x; # find mod(x, 1)
87MUL windEffect.x, temp0.y, gPiConstants.y; # scale from [0,1] to [0, 2PI]
88
89# offset to [-PI, PI]
90ADD windEffect.xyz, windEffect, {-3.141592, -3.141592, -3.141592, -3.141592};
91
92#calculate sinusoid
93MUL temp1, windEffect, windEffect; # x^2
94MAD sinWave, -temp1, gMinMaxConstants.w, gMinMaxConstants.z; # y = -(x^2)/7! + 1/5!
95MAD sinWave, sinWave, -temp1, gMinMaxConstants.y; # y = -(x^2) * (-(x^2)/7! + 1/5!) + 1/3!
96MAD sinWave, sinWave, -temp1, gMinMaxConstants.x; # y = -(x^2) * (-(x^2) * (-(x^2)/7! + 1/5!) + 1/3!) + 1
97MUL sinWave, sinWave, windEffect; # y = x * (-(x^2) * (-(x^2) * (-(x^2)/7! + 1/5!) + 1/3!) + 1)
98
99# sinWave.x holds sin(norm . wind_direction)+
100MUL sinWave.xyz, sinWave, gWindDir.w; # multiply by wind strength in gWindDir.w [-wind, wind]
101SUB sinWave.xyz, sinWave, {0.2, 0.2, 0.2, 0.2};
102MUL sinWave.xyz, sinWave, iClothing.w; # modulate by clothing coverage
103
104DP3 temp2.x, iClothing, iClothing;
105MAX temp2.x, temp2, {0, 0, 0, 0.2};
106MUL temp2.x, temp2.x, {3, 0, 0, 0};
107MUL sinWave.x, sinWave, temp2;
108
109#add pseudo-specular effect
110ADD blendNorm, blendNorm, {0, 0, -0.5, 0};
111
112#renormalize normal
113DP3 divisor.w, blendNorm, blendNorm;
114RSQ divisor.xyz, divisor.w;
115MUL blendNorm.xyz, blendNorm, divisor;
116
117#Output position
118DP4 blendedPos.x, blendMatX, iPos;
119DP4 blendedPos.y, blendMatY, iPos;
120DP4 blendedPos.z, blendMatZ, iPos;
121
122MUL offsetPos, gWindDir, sinWave.x; # multiply wind effect times clothing displacement
123MAD blendedPos, {-1.0, -1.0, -1.0, 0.0}, offsetPos, blendedPos; # add to offset vertex position, and zero out effect from w
124
125MOV blendedPos.w, {0, 0, 0, 1};
126
127#Projection
128DP4 oPos.x, gProjection[0], blendedPos; # projection matrix
129DP4 oPos.y, gProjection[1], blendedPos;
130DP4 oPos.z, gProjection[2], blendedPos;
131DP4 oPos.w, gProjection[3], blendedPos;
132
133#Light 0
134DP3 dots.x, blendNorm, gLightDir0;
135MAD dots.x, dots.x, {0.55, 0.55, 0.55, 0.55}, {0.3, 0.3, 0.3, 0.3};
136MAX dots, dots, {0, 0, 0, 0};
137
138# Accumulate color contributions.
139MAD temp2, dots.x, gDiffuseCol0, gModelAmbient;
140MOV colorAcc.xyz, temp2;
141
142#Light 1
143DP3 dots.x, blendNorm, gLightDir1;
144
145#Light 2
146SUB lightDir, gLightPos2, blendedPos;
147DP3 divisor.w, lightDir, lightDir;
148RSQ divisor.xyz, divisor.w;
149MUL lightDir.xyz, lightDir, divisor;
150
151DP3 dots.y, blendNorm, lightDir;
152
153#Light 3
154SUB lightDir, gLightPos3, blendedPos;
155DP3 divisor.w, lightDir, lightDir;
156RSQ divisor.xyz, divisor.w;
157MUL lightDir.xyz, lightDir, divisor;
158
159DP3 dots.z, blendNorm, lightDir;
160
161#Apply lights
162MAD dots, dots, {0.55, 0.55, 0.55, 0.55}, {0.3, 0.3, 0.3, 0.3};
163MAX dots, dots, {0, 0, 0, 0};
164MAD colorAcc.xyz, dots.x, gDiffuseCol1, colorAcc;
165MAD colorAcc.xyz, dots.y, gDiffuseCol2, colorAcc;
166MAD colorAcc.xyz, dots.z, gDiffuseCol3, colorAcc;
167
168#Output fog
169# This causes issues on ATI when fog is disabled
170MOV oFog.x, blendedPos.z;
171
172#Output color
173MOV colorAcc.w, {0, 0, 0, 1.0};
174MUL oCol0, gMaterialDiffuse, colorAcc;
175
176#Output tex coordinate
177MOV oTex0, iTex0;
178
179END
diff --git a/linden/indra/newview/app_settings/skinned_avatar_nobump.vp b/linden/indra/newview/app_settings/skinned_avatar_nobump.vp
deleted file mode 100644
index 1874e54..0000000
--- a/linden/indra/newview/app_settings/skinned_avatar_nobump.vp
+++ /dev/null
@@ -1,128 +0,0 @@
1!!ARBvp1.0
2# Vertex Program for lit, skinned avatars
3
4# Parameters
5PARAM mat[45] = { program.env[0..44] };
6PARAM proj[4] = { state.matrix.projection };
7PARAM modelAmbient = state.lightmodel.ambient;
8PARAM materialDiffuse = state.material.diffuse;
9PARAM lightDir0 = state.light[0].position;
10PARAM diffuseCol0 = state.light[0].diffuse;
11PARAM lightDir1 = state.light[1].position;
12PARAM diffuseCol1 = state.light[1].diffuse;
13PARAM lightPos2 = state.light[2].position;
14PARAM diffuseCol2 = state.light[2].diffuse;
15PARAM lightPos3 = state.light[3].position;
16PARAM diffuseCol3 = state.light[3].diffuse;
17
18# Per vertex inputs
19ATTRIB iPos = vertex.position;
20ATTRIB iNormal = vertex.normal;
21ATTRIB iTex0 = vertex.texcoord[0];
22ATTRIB iWeight = vertex.attrib[1];
23
24# Temporaries
25TEMP blendMat;
26TEMP blendPos; # skinned vertex pos
27TEMP dots; # dot product for lighting calculations
28TEMP blendNorm; # skinned normal
29TEMP colorAcc; # color accumulator
30TEMP lightDir;
31
32
33ALIAS scaledWeight = colorAcc;
34ALIAS divisor = blendMat; # divisor for normalization process
35
36ADDRESS address;
37
38# Outputs
39OUTPUT oPos = result.position; #position
40OUTPUT oCol0 = result.color; #primary color
41OUTPUT oTex0 = result.texcoord[0]; #texture coordinate set 0
42OUTPUT oFog = result.fogcoord; #output fog coord
43
44#fix input blending weight
45ARL address.x, iWeight.x;
46FRC scaledWeight.x, iWeight;
47
48#Output position and normal
49MUL dots, mat[address.x + 1], {1,1,1,1};
50SUB blendMat, dots, mat[address.x + 0];
51MAD blendMat, scaledWeight.x, blendMat, mat[address.x + 0];
52DP4 blendPos.x, blendMat, iPos;
53DP3 blendNorm.x, blendMat, iNormal;
54
55MUL dots, mat[address.x + 16], {1,1,1,1};
56SUB blendMat, dots, mat[address.x + 15];
57MAD blendMat, scaledWeight.x, blendMat, mat[address.x + 15];
58DP4 blendPos.y, blendMat, iPos;
59DP3 blendNorm.y, blendMat, iNormal;
60
61
62MUL dots, mat[address.x + 31], {1,1,1,1};
63SUB blendMat, dots, mat[address.x + 30];
64MAD blendMat, scaledWeight.x, blendMat, mat[address.x + 30];
65DP4 blendPos.z, blendMat, iPos;
66DP3 blendNorm.z, blendMat, iNormal;
67MOV blendPos.w, {0, 0, 0, 1};
68
69#renormalize normal
70#add "backlighting" effect
71ADD blendNorm, blendNorm, {0, 0, -0.2, 0};
72DP3 divisor.w, blendNorm, blendNorm;
73RSQ divisor.xyz, divisor.w;
74MUL blendNorm.xyz, blendNorm, divisor;
75
76
77#Projection
78DP4 oPos.x, proj[0], blendPos;
79DP4 oPos.y, proj[1], blendPos;
80DP4 oPos.z, proj[2], blendPos;
81DP4 oPos.w, proj[3], blendPos;
82
83
84#Light 0
85DP3 colorAcc.xyz, blendNorm, lightDir0;
86MAD colorAcc.xyz, colorAcc, {0.55, 0.55, 0.55, 0.55}, {0.3, 0.3, 0.3, 0.3};
87MAX colorAcc, colorAcc, {0, 0, 0, 0};
88
89# Accumulate color contributions.
90MAD colorAcc.xyz, colorAcc.x, diffuseCol0, modelAmbient;
91MOV colorAcc.w, {0, 0, 0, 1.0};
92
93#Light 1
94DP3 dots.x, blendNorm, lightDir1;
95
96#Light 2
97SUB lightDir, lightPos2, blendPos;
98DP3 divisor.w, lightDir, lightDir;
99RSQ divisor.xyz, divisor.w;
100MUL lightDir.xyz, lightDir, divisor;
101
102DP3 dots.y, blendNorm, lightDir;
103
104#Light 3
105SUB lightDir, lightPos3, blendPos;
106DP3 divisor.w, lightDir, lightDir;
107RSQ divisor.xyz, divisor.w;
108MUL lightDir.xyz, lightDir, divisor;
109
110DP3 dots.z, blendNorm, lightDir;
111
112#Apply lights
113MAD dots, dots, {0.55, 0.55, 0.55, 0.55}, {0.3, 0.3, 0.3, 0.3};
114MAX dots, dots, {0, 0, 0, 0};
115MAD colorAcc.xyz, dots.x, diffuseCol1, colorAcc;
116MAD colorAcc.xyz, dots.y, diffuseCol2, colorAcc;
117MAD colorAcc.xyz, dots.z, diffuseCol3, colorAcc;
118
119#Output color
120MUL oCol0, materialDiffuse, colorAcc;
121
122#Output tex coordinate
123MOV oTex0, iTex0;
124
125#Output fog
126MOV oFog.x, blendPos.z;
127
128END
diff --git a/linden/indra/newview/app_settings/skinned_avatar_select.vp b/linden/indra/newview/app_settings/skinned_avatar_select.vp
deleted file mode 100644
index 28506b0..0000000
--- a/linden/indra/newview/app_settings/skinned_avatar_select.vp
+++ /dev/null
@@ -1,60 +0,0 @@
1!!ARBvp1.0
2# Vertex Program for lit, skinned avatars
3
4# Parameters
5PARAM mat[45] = { program.env[0..44] };
6PARAM proj[4] = { state.matrix.projection };
7PARAM materialDiffuse = state.material.diffuse;
8
9# Per vertex inputs
10ATTRIB iPos = vertex.position;
11ATTRIB iTex0 = vertex.texcoord[0];
12ATTRIB iWeight = vertex.attrib[1];
13
14# Temporaries
15TEMP blendMat;
16TEMP blendPos; # skinned vertex pos
17TEMP childPos;
18TEMP parentPos;
19TEMP dots; # dot product for lighting calculations
20TEMP scaledWeight;
21
22ALIAS divisor = blendMat; # divisor for normalization process
23
24ADDRESS address;
25
26# Outputs
27OUTPUT oPos = result.position; #position
28OUTPUT oCol0 = result.color; #primary color
29OUTPUT oTex0 = result.texcoord[0]; #texture coordinate set 0
30
31#fix input blending weight
32ARL address.x, iWeight.x;
33FRC scaledWeight.x, iWeight;
34
35#Output position and normal
36DP4 parentPos.x, mat[address.x + 0], iPos;
37DP4 parentPos.y, mat[address.x + 15], iPos;
38DP4 parentPos.z, mat[address.x + 30], iPos;
39
40DP4 childPos.x, mat[address.x + 1], iPos;
41DP4 childPos.y, mat[address.x + 16], iPos;
42DP4 childPos.z, mat[address.x + 31], iPos;
43
44SUB blendPos, childPos, parentPos;
45MAD blendPos, scaledWeight.x, blendPos, parentPos;
46MOV blendPos.w, {0, 0, 0, 1};
47
48#Projection
49DP4 oPos.x, proj[0], blendPos;
50DP4 oPos.y, proj[1], blendPos;
51DP4 oPos.z, proj[2], blendPos;
52DP4 oPos.w, proj[3], blendPos;
53
54#Output color
55MOV oCol0, materialDiffuse;
56
57#Output tex coordinate
58MOV oTex0, iTex0;
59
60END
diff --git a/linden/indra/newview/app_settings/skinned_avatar_wind.vp b/linden/indra/newview/app_settings/skinned_avatar_wind.vp
deleted file mode 100644
index 5f40086..0000000
--- a/linden/indra/newview/app_settings/skinned_avatar_wind.vp
+++ /dev/null
@@ -1,211 +0,0 @@
1!!ARBvp1.0
2# Vertex Program for lit, skinned avatars
3
4# Parameters
5PARAM gMat[45] = { program.env[0..44] };
6PARAM gEmbossScale = program.env[63];
7PARAM gWindDir = program.env[60]; # wind direction with strength stored in w
8PARAM gSinWaveParams = program.env[61]; # frequency, frequency2, frequency, phase
9PARAM gGravity = program.env[62];
10PARAM gMinMaxConstants = {1.0, 0.166666, 0.0083143, .00018542}; #minimax-generated coefficients
11PARAM gPiConstants = {0.159154943, 6.28318530, 3.141592653, 1.5707963}; # {1/2PI, 2PI, PI, PI/2}
12PARAM gProj[4] = { state.matrix.projection };
13PARAM gModelAmbient = state.lightmodel.ambient;
14PARAM gMaterialDiffuse = state.material.diffuse;
15PARAM gLightDir0 = state.light[0].position;
16PARAM gDiffuseCol0 = state.light[0].diffuse;
17PARAM gLightDir1 = state.light[1].position;
18PARAM gDiffuseCol1 = state.light[1].diffuse;
19PARAM gLightPos2 = state.light[2].position;
20PARAM gDiffuseCol2 = state.light[2].diffuse;
21PARAM gLightPos3 = state.light[3].position;
22PARAM gDiffuseCol3 = state.light[3].diffuse;
23
24# Per vertex inputs
25ATTRIB iPos = vertex.position;
26ATTRIB iNormal = vertex.normal;
27ATTRIB iTex0 = vertex.texcoord[0];
28ATTRIB iTex1 = vertex.texcoord[1];
29ATTRIB iWeight = vertex.attrib[1];
30ATTRIB iClothing = vertex.attrib[4];
31ATTRIB iBinormal = vertex.attrib[6];
32
33# Temporaries
34TEMP blendMatX;
35TEMP blendMatY;
36TEMP blendMatZ;
37TEMP blendPos; # weighted sum of tpos0 and tpos1
38TEMP blendNorm; # weighted sum of eyeNormal0 and eyeNormal1
39TEMP blendBinorm; # result of skinned binormal
40TEMP temp0;
41TEMP temp1; # another general purpose temp
42TEMP temp2;
43
44ALIAS blendTangent = temp2; # result of skinned tangent
45
46ALIAS colorAcc = temp0;
47ALIAS offsetPos = temp1;
48ALIAS dots = temp1; # dot product for lighting calculations
49ALIAS scaledWeight = temp0; # vertex weight as decoded from input weight
50ALIAS divisor = temp2;
51ALIAS sinWave = temp0;
52ALIAS windEffect = temp2;
53ALIAS lightDir = blendMatX;
54
55ADDRESS address;
56
57# Outputs
58OUTPUT oPos = result.position; # position
59OUTPUT oCol0 = result.color; # primary color
60OUTPUT oTex0 = result.texcoord[0]; # texture coordinate set 0
61OUTPUT oTex1 = result.texcoord[1]; # texture coordinate set 1
62OUTPUT oFog = result.fogcoord; # output fog coordinates
63
64#fix input blending weight
65ARL address.x, iWeight.x;
66FRC scaledWeight.x, iWeight;
67
68# Blend joint matrices
69MUL blendMatX, gMat[address.x + 1], {1,1,1,1};
70SUB blendMatX, blendMatX, gMat[address.x + 0];
71MAD blendMatX, scaledWeight.x, blendMatX, gMat[address.x + 0];
72DP3 blendNorm.x, blendMatX, iNormal;
73DP3 blendBinorm.x, blendMatX, iBinormal;
74
75MUL blendMatY, gMat[address.x + 16], {1,1,1,1};
76SUB blendMatY, blendMatY, gMat[address.x + 15];
77MAD blendMatY, scaledWeight.x, blendMatY, gMat[address.x + 15];
78DP3 blendNorm.y, blendMatY, iNormal;
79DP3 blendBinorm.y, blendMatY, iBinormal;
80
81MUL blendMatZ, gMat[address.x + 31], {1,1,1,1};
82SUB blendMatZ, blendMatZ, gMat[address.x + 30];
83MAD blendMatZ, scaledWeight.x, blendMatZ, gMat[address.x + 30];
84DP3 blendNorm.z, blendMatZ, iNormal;
85DP3 blendBinorm.z, blendMatZ, iBinormal;
86
87#wind
88DP3 windEffect, blendNorm, gWindDir;
89DP3 blendPos.x, blendMatZ, iPos;
90MAD windEffect.xyz, blendPos.x, {0.015, 0.015, 0.015, 0}, windEffect;
91MAD windEffect.w, windEffect, {0, 0, 0, 2}, {0, 0, 0, 1}; # move wind offset value to [-1, 3]
92MUL windEffect.w, windEffect, gWindDir; # modulate wind strength
93MAD windEffect.xyz, windEffect, gSinWaveParams, gSinWaveParams.w; # use sin wave params to scale and offset input
94
95#reduce to period of 2 PI
96MUL temp1.xyz, windEffect, gPiConstants.x; # change input as multiple of [0-2PI] to [0-1]
97EXP temp0, temp1.x; # find mod(x, 1)
98MUL windEffect.x, temp0.y, gPiConstants.y; # scale from [0,1] to [0, 2PI]
99ADD temp1.z, temp1.z, -gPiConstants.w; # shift normal oscillation by PI/2
100EXP temp0, temp1.z; # find mod(x, 1)
101
102MUL windEffect.z, temp0.y, gPiConstants.y; # scale from [0,1] to [0, 2PI]
103
104# offset to [-PI, PI]
105ADD windEffect.xyz, windEffect, {-3.141592, -3.141592, -3.141592, -3.141592};
106
107#calculate sinusoid
108MUL temp1, windEffect, windEffect; # x^2
109MAD sinWave, -temp1, gMinMaxConstants.w, gMinMaxConstants.z; # y = -(x^2)/7! + 1/5!
110MAD sinWave, sinWave, -temp1, gMinMaxConstants.y; # y = -(x^2) * (-(x^2)/7! + 1/5!) + 1/3!
111MAD sinWave, sinWave, -temp1, gMinMaxConstants.x; # y = -(x^2) * (-(x^2) * (-(x^2)/7! + 1/5!) + 1/3!) + 1
112MUL sinWave, sinWave, windEffect; # y = x * (-(x^2) * (-(x^2) * (-(x^2)/7! + 1/5!) + 1/3!) + 1)
113
114# sinWave.x holds sin(norm . wind_direction) with primary frequency
115# sinWave.y holds sin(norm . wind_direction) with secondary frequency
116# sinWave.z hold cos(norm . wind_direction) with primary frequency
117MAD sinWave.xyz, sinWave, gWindDir.w, windEffect.w; # multiply by wind strength in gWindDir.w [-wind, wind]
118 # add normal facing bias offset [-wind,wind] -> [-wind - .25, wind + 1]
119DP3 temp1, blendNorm, gGravity; # how much is this normal facing in direction of gGravity?
120MIN temp1, temp1, {0.2, 0, 0, 0}; # clamp [-1, 1] to [-1, 0.2]
121MUL temp1, temp1, {1.5, 0, 0, 0}; # scale from [-1,0.2] to [-1.5, 0.3]
122ADD sinWave.x, sinWave, temp1; # add gGravity effect to sinwave (only primary frequency)
123MUL sinWave.xyz, sinWave, iClothing.w; # modulate by clothing coverage
124#MAD temp2, {1,1,1,1}, iClothing.w, {-1,-1,-1,-1};
125#ADD sinWave, sinWave, temp2;
126MAX sinWave.xyz, sinWave, {-1, -1, -1, -1}; # clamp to underlying body shape
127MUL offsetPos, iClothing, sinWave.x; # multiply wind effect times clothing displacement
128MAD temp2, gWindDir, sinWave.z, blendNorm; # calculate normal offset due to wind oscillation
129MAD offsetPos, {1.0, 1.0, 1.0, 0.0}, offsetPos, iPos; # add to offset vertex position, and zero out effect from w
130MAD blendNorm, temp2, {2, 2, 2, 2}, blendNorm; # add sin wave effect on normals (exaggerated)
131
132#add "backlighting" effect
133SUB colorAcc, {1, 1, 1, 1}, iClothing;
134MAD blendNorm, colorAcc.w, {0, 0, -0.2, 0}, blendNorm;
135
136#renormalize normal (again)
137DP3 divisor.w, blendNorm, blendNorm;
138RSQ divisor.xyz, divisor.w;
139MUL blendNorm.xyz, blendNorm, divisor;
140
141#project binormal to normal plane to ensure orthogonality
142DP3 temp2, blendNorm, blendBinorm;
143SUB blendBinorm, blendBinorm, temp2;
144
145#renormalize binormal
146DP3 divisor.w, blendBinorm, blendBinorm;
147RSQ divisor.xyz, divisor.w;
148MUL blendBinorm.xyz, blendBinorm, divisor;
149
150#tangent = binormal X normal
151XPD blendTangent, blendNorm, blendBinorm;
152
153#oTex1 = iTex0 + LLVector2( gLightDir0 * tangent, gLightDir0 * binormal );
154DP3 blendTangent.x, gLightDir0, blendTangent;
155DP3 blendTangent.y, gLightDir0, blendBinorm;
156MAD oTex1, gEmbossScale.x, blendTangent, iTex0;
157
158#Output position
159DP4 blendPos.x, blendMatX, offsetPos;
160DP4 blendPos.y, blendMatY, offsetPos;
161DP4 blendPos.z, blendMatZ, offsetPos;
162MOV blendPos.w, {0, 0, 0, 1};
163
164#Projection
165DP4 oPos.x, gProj[0], blendPos;
166DP4 oPos.y, gProj[1], blendPos;
167DP4 oPos.z, gProj[2], blendPos;
168DP4 oPos.w, gProj[3], blendPos;
169
170#Light 0
171DP3 colorAcc.x, blendNorm, gLightDir0;
172MAD colorAcc.x, colorAcc.x, {0.55, 0.55, 0.55, 0.55}, {0.3, 0.3, 0.3, 0.3};
173MAX colorAcc, colorAcc, {0, 0, 0, 0};
174
175# Accumulate color contributions.
176MAD colorAcc.xyz, colorAcc.x, gDiffuseCol0, gModelAmbient;
177
178#Light 1
179DP3 dots.x, blendNorm, gLightDir1;
180
181#Light 2
182SUB lightDir, gLightPos2, blendPos;
183DP3 divisor.w, lightDir, lightDir;
184RSQ divisor.xyz, divisor.w;
185MUL lightDir, lightDir, divisor;
186DP3 dots.y, blendNorm, lightDir;
187
188#Light 3
189SUB lightDir, gLightPos3, blendPos;
190DP3 divisor.w, lightDir, lightDir;
191RSQ divisor.xyz, divisor.w;
192MUL lightDir, lightDir, divisor;
193DP3 dots.z, blendNorm, lightDir;
194
195MAD dots, dots, {0.55, 0.55, 0.55, 0.55}, {0.3, 0.3, 0.3, 0.3};
196MAX dots, dots, {0, 0, 0, 0};
197MAD colorAcc, dots.x, gDiffuseCol1, colorAcc;
198MAD colorAcc, dots.y, gDiffuseCol2, colorAcc;
199MAD colorAcc, dots.z, gDiffuseCol3, colorAcc;
200
201#Output color
202MOV colorAcc.w, {0, 0, 0, 1.0};
203MUL oCol0, gMaterialDiffuse, colorAcc;
204
205#Output tex coordinate
206MOV oTex0, iTex0;
207
208#Output fog
209MOV oFog.x, blendPos.z;
210
211END
diff --git a/linden/indra/newview/files.lst b/linden/indra/newview/files.lst
index f2603d8..15062ae 100644
--- a/linden/indra/newview/files.lst
+++ b/linden/indra/newview/files.lst
@@ -1,6 +1,7 @@
1newview/llagent.cpp 1newview/llagent.cpp
2newview/llagentdata.cpp 2newview/llagentdata.cpp
3newview/llagentpilot.cpp 3newview/llagentpilot.cpp
4newview/llanimstatelabels.cpp
4newview/llappviewer.cpp 5newview/llappviewer.cpp
5newview/llappviewerlinux.cpp 6newview/llappviewerlinux.cpp
6newview/llassetuploadresponders.cpp 7newview/llassetuploadresponders.cpp
@@ -251,6 +252,7 @@ newview/llstatbar.cpp
251newview/llstatgraph.cpp 252newview/llstatgraph.cpp
252newview/llstatusbar.cpp 253newview/llstatusbar.cpp
253newview/llstatview.cpp 254newview/llstatview.cpp
255newview/llstylemap.cpp
254newview/llsurface.cpp 256newview/llsurface.cpp
255newview/llsurfacepatch.cpp 257newview/llsurfacepatch.cpp
256newview/lltexlayer.cpp 258newview/lltexlayer.cpp
@@ -279,6 +281,7 @@ newview/lltoolselectland.cpp
279newview/lltoolselectrect.cpp 281newview/lltoolselectrect.cpp
280newview/lltoolview.cpp 282newview/lltoolview.cpp
281newview/lltracker.cpp 283newview/lltracker.cpp
284newview/lltrans.cpp
282newview/lluploaddialog.cpp 285newview/lluploaddialog.cpp
283newview/llurl.cpp 286newview/llurl.cpp
284newview/llurldispatcher.cpp 287newview/llurldispatcher.cpp
@@ -348,6 +351,7 @@ newview/llvotree.cpp
348newview/llvovolume.cpp 351newview/llvovolume.cpp
349newview/llvowater.cpp 352newview/llvowater.cpp
350newview/llvowlsky.cpp 353newview/llvowlsky.cpp
354newview/llwatchdog.cpp
351newview/llwaterparammanager.cpp 355newview/llwaterparammanager.cpp
352newview/llwaterparamset.cpp 356newview/llwaterparamset.cpp
353newview/llwearable.cpp 357newview/llwearable.cpp
diff --git a/linden/indra/newview/installers/windows/installer_template.nsi b/linden/indra/newview/installers/windows/installer_template.nsi
index 8db336f..836780d 100644
--- a/linden/indra/newview/installers/windows/installer_template.nsi
+++ b/linden/indra/newview/installers/windows/installer_template.nsi
@@ -87,7 +87,6 @@ SetShellVarContext all ; install for all users (if you change this, change it
87 87
88; Start with some default values. 88; Start with some default values.
89StrCpy $INSTFLAGS "${INSTFLAGS}" 89StrCpy $INSTFLAGS "${INSTFLAGS}"
90StrCpy $INSTFLAGS "$INSTFLAGS $LANGFLAGS"
91StrCpy $INSTPROG "${INSTNAME}" 90StrCpy $INSTPROG "${INSTNAME}"
92StrCpy $INSTEXE "${INSTEXE}" 91StrCpy $INSTEXE "${INSTEXE}"
93StrCpy $INSTSHORTCUT "${SHORTCUT}" 92StrCpy $INSTSHORTCUT "${SHORTCUT}"
@@ -933,26 +932,6 @@ Function .onInit
933 932
934 ; save language in registry 933 ; save language in registry
935 WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\Linden Research, Inc.\${INSTNAME}" "InstallerLanguage" $LANGUAGE 934 WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\Linden Research, Inc.\${INSTNAME}" "InstallerLanguage" $LANGUAGE
936
937 ; generate language ID that will be used as a command line arg
938 StrCmp $LANGUAGE "1042" 0 +3
939 StrCpy $LANGFLAGS " --set SystemLanguage ko"
940 Goto EndOfFunc
941
942 StrCmp $LANGUAGE "1041" 0 +3
943 StrCpy $LANGFLAGS " --set SystemLanguage ja"
944 Goto EndOfFunc
945
946 StrCmp $LANGUAGE "1031" 0 +3
947 StrCpy $LANGFLAGS " --set SystemLanguage de"
948 Goto EndOfFunc
949
950 StrCmp $LANGUAGE "1033" 0 +3
951 StrCpy $LANGFLAGS " --set SystemLanguage en-us"
952 Goto EndOfFunc
953
954 EndOfFunc:
955
956FunctionEnd 935FunctionEnd
957 936
958;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 937;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
diff --git a/linden/indra/newview/linux_tools/client-readme.txt b/linden/indra/newview/linux_tools/client-readme.txt
index 87087be..179cb9e 100644
--- a/linden/indra/newview/linux_tools/client-readme.txt
+++ b/linden/indra/newview/linux_tools/client-readme.txt
@@ -12,7 +12,7 @@ Life itself - please see <http://www.secondlife.com/whatis/>.
125. Troubleshooting 125. Troubleshooting
13 5.1. 'Error creating window.' 13 5.1. 'Error creating window.'
14 5.2. System hangs 14 5.2. System hangs
15 5.3. 'Shiny' and client performance 15 5.3. Blank window after minimizing it
16 5.4. Audio 16 5.4. Audio
17 5.5. 'Alt' key for camera controls doesn't work 17 5.5. 'Alt' key for camera controls doesn't work
18 5.6. In-world movie playback 18 5.6. In-world movie playback
@@ -98,16 +98,6 @@ you wish.
98These are the most commonly-encountered known issues which are specific to 98These are the most commonly-encountered known issues which are specific to
99the Beta release of the Linux client. 99the Beta release of the Linux client.
100 100
101* VISUAL EFFECTS AND PERFORMANCE - many Linux graphics drivers are not as
102 robust as their counterparts for other operating systems, so some advanced
103 Second Life graphical features have been DISABLED by default to aid
104 stability. See PROBLEM 3 in the TROUBLESHOOTING section if you wish to
105 turn these on to possibly enhance your experience.
106
107* MISC - The following features are not currently fully implemented on the
108 Linux client and are therefore known not to work properly:
109 * Full Unicode font rendering
110
111* UPLOAD / SAVE / COLOR-PICKER DIALOGS - These only appear when the client 101* UPLOAD / SAVE / COLOR-PICKER DIALOGS - These only appear when the client
112 is in 'windowed' mode, not 'fullscreen' mode. 102 is in 'windowed' mode, not 'fullscreen' mode.
113 103
@@ -156,29 +146,21 @@ SOLUTION:- As a last resort, you can disable most of Second Life's advanced
156 graphics features by editing the 'secondlife' script and removing the '#' 146 graphics features by editing the 'secondlife' script and removing the '#'
157 from the line which reads '#export LL_GL_NOEXT=x' 147 from the line which reads '#export LL_GL_NOEXT=x'
158 148
159PROBLEM 3:- Performance or graphical quality are not as high as I expect. 149PROBLEM 3:- After I minimize the Second Life window, it's just blank when
160PROBLEM:- 'SHINY' doesn't work. 150 it comes back.
161PROBLEM:- I can't turn on Anisotropic Filtering, Ripple Water, or AGP. 151SOLUTION:- Some Linux desktop 'Visual Effects' features are incompatible
162SOLUTION:- Some graphics performance features in Second Life are disabled 152 with Second Life. One reported solution is to use your desktop
163 by default for the Linux version due to stability issues with some common 153 configuration program to disable such effects. For example, on Ubuntu 7.10,
164 Linux graphic drivers. You can re-enable these features at the slight 154 use the desktop toolbar menu to select System -> Preferences -> Appearance,
165 risk of decreasing system stability. To do so: 155 then change 'Visual Effects' to 'None'.
166 * Edit the 'secondlife' script. Comment-out these lines by putting a '#' 156
167 in front of them: 'export LL_GL_BASICEXT=x', 'export LL_GL_NOEXT=x', 157PROBLEM 4:- Music and sound effects are silent or very stuttery.
168 'export LL_GL_BLACKLIST=abcdefghijklmno'. 158SOLUTION:- The most common solution is to ensure that you have the 'esd'
169 * Now start Second Life. Some advanced performance features will now be 159 program (part of the 'esound' package) installed and running before you
170 automatically used, and some new options in Preferences will now be 160 start Second Life. Users of Ubuntu (and some other) Linux systems can
171 available to you; there is no guarantee, however, that they will 161 simply run the following to install and configure 'esound':
172 positively affect performance! 162 sudo apt-get install esound
173SOLUTION:- If you are not running an official Second Life client obtained from 163 For others, simply running 'esd&' from a command-line should get it running.
174 secondlife.com, you should consider doing so as you may find its
175 performance to be superior to third-party versions.
176
177PROBLEM 4:- Sound effects seem to 'lag' a fraction of a second behind
178 actions.
179SOLUTION:- You may uncomment the 'LL_BAD_ESD' line in the 'secondlife' script
180 to get more responsive audio. However, if you do this then you may
181 encounter audio issues or a hang during login, so beware.
182 164
183PROBLEM 5:- Using the 'Alt' key to control the camera doesn't work or just 165PROBLEM 5:- Using the 'Alt' key to control the camera doesn't work or just
184 moves the Second Life window. 166 moves the Second Life window.
diff --git a/linden/indra/newview/linux_tools/unicode.ttf b/linden/indra/newview/linux_tools/unicode.ttf
deleted file mode 120000
index 91e6150..0000000
--- a/linden/indra/newview/linux_tools/unicode.ttf
+++ /dev/null
@@ -1 +0,0 @@
1/usr/share/fonts/truetype/kochi/kochi-gothic.ttf \ No newline at end of file
diff --git a/linden/indra/newview/linux_tools/wrapper.sh b/linden/indra/newview/linux_tools/wrapper.sh
index 1b7d6b8..eaa2f61 100755
--- a/linden/indra/newview/linux_tools/wrapper.sh
+++ b/linden/indra/newview/linux_tools/wrapper.sh
@@ -43,7 +43,7 @@
43## in the bin directory will be stripped: you should replace it with 43## in the bin directory will be stripped: you should replace it with
44## an unstripped binary before you run. 44## an unstripped binary before you run.
45#export LL_WRAPPER='gdb --args' 45#export LL_WRAPPER='gdb --args'
46#export LL_WRAPPER='valgrind --smc-check=all --log-file=secondlife.vg --leak-check=full --suppressions=/usr/lib/valgrind/glibc-2.5.supp --suppressions=secondlife-i686.supp' 46#export LL_WRAPPER='valgrind --smc-check=all --error-limit=no --log-file=secondlife.vg --leak-check=full --suppressions=/usr/lib/valgrind/glibc-2.5.supp --suppressions=secondlife-i686.supp'
47 47
48## - Avoids an often-buggy X feature that doesn't really benefit us anyway. 48## - Avoids an often-buggy X feature that doesn't really benefit us anyway.
49export SDL_VIDEO_X11_DGAMOUSE=0 49export SDL_VIDEO_X11_DGAMOUSE=0
@@ -104,7 +104,7 @@ if [ -n "$LL_RUN_ERR" ]; then
104 if [ "$LL_RUN_ERR" = "runerr" ]; then 104 if [ "$LL_RUN_ERR" = "runerr" ]; then
105 # generic error running the binary 105 # generic error running the binary
106 echo '*** Unclean shutdown. ***' 106 echo '*** Unclean shutdown. ***'
107 if [ "`arch`" = "x86_64" ]; then 107 if [ "`uname -m`" = "x86_64" ]; then
108 echo 108 echo
109 cat << EOFMARKER 109 cat << EOFMARKER
110You are running the Second Life Viewer on a x86_64 platform. The 110You are running the Second Life Viewer on a x86_64 platform. The
diff --git a/linden/indra/newview/llagent.cpp b/linden/indra/newview/llagent.cpp
index 397a11e..1d3c5d4 100644
--- a/linden/indra/newview/llagent.cpp
+++ b/linden/indra/newview/llagent.cpp
@@ -5823,6 +5823,7 @@ void LLAgent::teleportViaLure(const LLUUID& lure_id, BOOL godlike)
5823 msg->addUUIDFast(_PREHASH_AgentID, getID()); 5823 msg->addUUIDFast(_PREHASH_AgentID, getID());
5824 msg->addUUIDFast(_PREHASH_SessionID, getSessionID()); 5824 msg->addUUIDFast(_PREHASH_SessionID, getSessionID());
5825 msg->addUUIDFast(_PREHASH_LureID, lure_id); 5825 msg->addUUIDFast(_PREHASH_LureID, lure_id);
5826 // teleport_flags is a legacy field, now derived sim-side:
5826 msg->addU32("TeleportFlags", teleport_flags); 5827 msg->addU32("TeleportFlags", teleport_flags);
5827 sendReliableMessage(); 5828 sendReliableMessage();
5828 } 5829 }
diff --git a/linden/indra/llwindow/llwindowlinux.cpp b/linden/indra/newview/llanimstatelabels.cpp
index 6c026e4..c51740f 100644
--- a/linden/indra/llwindow/llwindowlinux.cpp
+++ b/linden/indra/newview/llanimstatelabels.cpp
@@ -1,6 +1,6 @@
1/** 1/**
2 * @file llwindowlinux.cpp 2 * @file llanimationstatenames.cpp
3 * @brief Platform-dependent implementation of llwindow 3 * @brief Names for built-in animation states
4 * 4 *
5 * $LicenseInfo:firstyear=2001&license=viewergpl$ 5 * $LicenseInfo:firstyear=2001&license=viewergpl$
6 * 6 *
@@ -29,33 +29,11 @@
29 * $/LicenseInfo$ 29 * $/LicenseInfo$
30 */ 30 */
31 31
32#if LL_LINUX 32#include "llviewerprecompiledheaders.h"
33#include "llanimstatelabels.h"
34#include "lltrans.h"
33 35
34#include "linden_common.h" 36std::string LLAnimStateLabels::getStateLabel( const char *animName )
35#include "indra_constants.h"
36
37#include "llwindowlinux.h"
38#include "llgl.h"
39#include "llglheaders.h"
40
41//
42// LLWindowLinux
43//
44LLWindowLinux::LLWindowLinux(char *title, char *name, S32 x, S32 y, S32 width, S32 height,
45 U32 flags, BOOL fullscreen, BOOL clearBg,
46 BOOL disable_vsync, BOOL use_gl, BOOL ignore_pixel_depth)
47 : LLWindow(fullscreen, flags)
48{
49 llerrs << "Linux window not yet supported" << llendl;
50}
51
52
53LLWindowLinux::~LLWindowLinux()
54{ 37{
38 return LLTrans::getString("anim_" + LLString(animName) );
55} 39}
56
57void LLWindowLinux::swapBuffers()
58{
59}
60
61#endif // LL_LINUX
diff --git a/linden/indra/llrender/llvertexprogramgl.h b/linden/indra/newview/llanimstatelabels.h
index f9190f9..db1c1d8 100644
--- a/linden/indra/llrender/llvertexprogramgl.h
+++ b/linden/indra/newview/llanimstatelabels.h
@@ -1,10 +1,11 @@
1/** 1/**
2 * @file llvertexprogramgl.h 2 * @file llanimstatelabels.h
3 * @brief LLVertexProgramGL base class 3 * @brief Declaration of LLVOAvatar class which is a derivation fo
4 * LLViewerObject
4 * 5 *
5 * $LicenseInfo:firstyear=2003&license=viewergpl$ 6 * $LicenseInfo:firstyear=2001&license=viewergpl$
6 * 7 *
7 * Copyright (c) 2003-2008, Linden Research, Inc. 8 * Copyright (c) 2001-2008, Linden Research, Inc.
8 * 9 *
9 * Second Life Viewer Source Code 10 * Second Life Viewer Source Code
10 * 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
@@ -29,27 +30,13 @@
29 * $/LicenseInfo$ 30 * $/LicenseInfo$
30 */ 31 */
31 32
32#ifndef LL_LLVERTEXPROGRAMGL_H 33#ifndef LL_LLANIMSTATELABELS_H
33#define LL_LLVERTEXPROGRAMGL_H 34#define LL_LLANIMSTATELABELS_H
34 35
35// This file contains the definition of LLVertexProgramGL, 36class LLAnimStateLabels
36// for purposes of running vertex programs on GL hardware.
37
38#include "llgl.h"
39
40class LLVertexProgramGL
41{ 37{
42public: 38public:
43 LLVertexProgramGL(); 39 static std::string getStateLabel( const char *animName );
44 ~LLVertexProgramGL();
45
46 void bind();
47 void unbind();
48
49 BOOL load(const char * filename);
50
51private:
52 LLGLuint mVertexProgramID;
53}; 40};
54 41
55#endif // LL_LLVERTEXPROGRAMGL_H 42#endif // LL_ANIMSTATELABELS_H
diff --git a/linden/indra/newview/llappviewer.cpp b/linden/indra/newview/llappviewer.cpp
index 4a9a158..c6f4cdd 100644
--- a/linden/indra/newview/llappviewer.cpp
+++ b/linden/indra/newview/llappviewer.cpp
@@ -64,7 +64,7 @@
64#include "llurldispatcher.h" 64#include "llurldispatcher.h"
65#include "llurlhistory.h" 65#include "llurlhistory.h"
66#include "llfirstuse.h" 66#include "llfirstuse.h"
67#include "llglimmediate.h" 67#include "llrender.h"
68 68
69#include "llweb.h" 69#include "llweb.h"
70#include "llsecondlifeurls.h" 70#include "llsecondlifeurls.h"
@@ -102,6 +102,7 @@
102#include "audioengine.h" 102#include "audioengine.h"
103#include "llviewermenu.h" 103#include "llviewermenu.h"
104#include "llselectmgr.h" 104#include "llselectmgr.h"
105#include "lltrans.h"
105#include "lltracker.h" 106#include "lltracker.h"
106#include "llviewerparcelmgr.h" 107#include "llviewerparcelmgr.h"
107#include "llworldmapview.h" 108#include "llworldmapview.h"
@@ -121,6 +122,7 @@
121#include "llhudeffecttrail.h" 122#include "llhudeffecttrail.h"
122#include "llvectorperfoptions.h" 123#include "llvectorperfoptions.h"
123#include "llurlsimstring.h" 124#include "llurlsimstring.h"
125#include "llwatchdog.h"
124 126
125// Included so that constants/settings might be initialized 127// Included so that constants/settings might be initialized
126// in save_settings_to_globals() 128// in save_settings_to_globals()
@@ -160,6 +162,13 @@
160 162
161#include "llcommandlineparser.h" 163#include "llcommandlineparser.h"
162 164
165// annoying detail to determine whether font prefs are over-ridden
166#if LL_LINUX
167# define LL_DYNAMIC_FONT_DISCOVERY 1
168#else
169# define LL_DYNAMIC_FONT_DISCOVERY 0
170#endif
171
163// *FIX: These extern globals should be cleaned up. 172// *FIX: These extern globals should be cleaned up.
164// The globals either represent state/config/resource-storage of either 173// The globals either represent state/config/resource-storage of either
165// this app, or another 'component' of the viewer. App globals should be 174// this app, or another 'component' of the viewer. App globals should be
@@ -183,24 +192,6 @@
183// viewer.cpp - these are only used in viewer, should be easily moved. 192// viewer.cpp - these are only used in viewer, should be easily moved.
184extern void disable_win_error_reporting(); 193extern void disable_win_error_reporting();
185 194
186//#define APPLE_PREVIEW // Define this if you're doing a preview build on the Mac
187#if LL_RELEASE_FOR_DOWNLOAD
188// Default userserver for production builds is agni
189#ifndef APPLE_PREVIEW
190static EGridInfo GridDefaultChoice = GRID_INFO_AGNI;
191#else
192static EGridInfo GridDefaultChoice = GRID_INFO_ADITI;
193#endif
194#else
195// Default userserver for development builds is none
196static EGridInfo GridDefaultChoice = GRID_INFO_NONE;
197#endif
198
199#if LL_WINDOWS
200extern void create_console();
201#endif
202
203
204#if LL_DARWIN 195#if LL_DARWIN
205#include <Carbon/Carbon.h> 196#include <Carbon/Carbon.h>
206extern void init_apple_menu(const char* product); 197extern void init_apple_menu(const char* product);
@@ -214,6 +205,7 @@ extern OSStatus DisplayReleaseNotes(void);
214 205
215extern BOOL gRandomizeFramerate; 206extern BOOL gRandomizeFramerate;
216extern BOOL gPeriodicSlowFrame; 207extern BOOL gPeriodicSlowFrame;
208extern BOOL gDebugGL;
217 209
218//////////////////////////////////////////////////////////// 210////////////////////////////////////////////////////////////
219// All from the last globals push... 211// All from the last globals push...
@@ -413,7 +405,8 @@ static void settings_modify()
413 LLVOAvatar::sUseImpostors = gSavedSettings.getBOOL("RenderUseImpostors"); 405 LLVOAvatar::sUseImpostors = gSavedSettings.getBOOL("RenderUseImpostors");
414 LLVOSurfacePatch::sLODFactor = gSavedSettings.getF32("RenderTerrainLODFactor"); 406 LLVOSurfacePatch::sLODFactor = gSavedSettings.getF32("RenderTerrainLODFactor");
415 LLVOSurfacePatch::sLODFactor *= LLVOSurfacePatch::sLODFactor; //sqaure lod factor to get exponential range of [1,4] 407 LLVOSurfacePatch::sLODFactor *= LLVOSurfacePatch::sLODFactor; //sqaure lod factor to get exponential range of [1,4]
416 gGL.setClever(gSavedSettings.getBOOL("RenderUseCleverUI")); 408 gDebugGL = gSavedSettings.getBOOL("RenderDebugGL");
409 gDebugPipeline = gSavedSettings.getBOOL("RenderDebugPipeline");
417 410
418#if LL_VECTORIZE 411#if LL_VECTORIZE
419 if (gSysCPU.hasAltivec()) 412 if (gSysCPU.hasAltivec())
@@ -453,73 +446,35 @@ static void settings_modify()
453 gSavedSettings.setBOOL("PTTCurrentlyEnabled", TRUE); //gSavedSettings.getBOOL("EnablePushToTalk")); 446 gSavedSettings.setBOOL("PTTCurrentlyEnabled", TRUE); //gSavedSettings.getBOOL("EnablePushToTalk"));
454} 447}
455 448
456void initGridChoice() 449void LLAppViewer::initGridChoice()
457{ 450{
458 LLString gridChoice = gSavedSettings.getString("GridChoice"); 451 // Load up the initial grid choice from:
459 if(!gridChoice.empty()) 452 // - hard coded defaults...
460 // Used to show first chunk of each argument passed in the 453 // - command line settings...
461 // window title. 454 // - if dev build, persisted settings...
462 {
463 // find the grid choice from the user setting.
464 int gridIndex = GRID_INFO_NONE;
465 for(;gridIndex < GRID_INFO_OTHER; ++gridIndex )
466 {
467 if(0 == LLString::compareInsensitive(gGridInfo[gridIndex].mLabel, gridChoice.c_str()))
468 {
469 gGridChoice = (EGridInfo)gridIndex;
470
471 if(GRID_INFO_LOCAL == gGridChoice)
472 {
473 gGridName = LOOPBACK_ADDRESS_STRING;
474 break;
475 }
476 else
477 {
478 gGridName = gGridInfo[gGridChoice].mName;
479 break;
480 }
481 }
482 }
483
484 if(GRID_INFO_OTHER == gridIndex)
485 {
486 // *FIX:MEP Can and should we validate that this is an IP address?
487 gGridChoice = (EGridInfo)gridIndex;
488 gGridName = llformat("%s", gSavedSettings.getString("GridChoice").c_str());
489
490 }
491 }
492 455
456 // Set the "grid choice", this is specified by command line.
457 std::string grid_choice = gSavedSettings.getString("CmdLineGridChoice");
458 LLViewerLogin::getInstance()->setGridChoice(grid_choice);
493 459
494#if !LL_RELEASE_FOR_DOWNLOAD 460#if !LL_RELEASE_FOR_DOWNLOAD
495 if (gGridChoice == GRID_INFO_NONE) 461 // Development version: load last server choice by default
462 // ignored is the command line grid choice has been set
463 if(grid_choice.empty())
496 { 464 {
497 // Development version: load last server choice by default (overridden by cmd line args) 465 S32 server = gSavedSettings.getS32("ServerChoice");
498 S32 server = gSavedSettings.getS32("ServerChoice"); 466 server = llclamp(server, 0, (S32)GRID_INFO_COUNT - 1);
499 if (server != 0) 467 if(server == GRID_INFO_OTHER)
500 gGridChoice = (EGridInfo)llclamp(server, 0, (S32)GRID_INFO_COUNT - 1);
501 if (server == GRID_INFO_OTHER)
502 { 468 {
503 LLString custom_server = gSavedSettings.getString("CustomServer"); 469 LLString custom_server = gSavedSettings.getString("CustomServer");
504 if (custom_server.empty()) 470 LLViewerLogin::getInstance()->setGridChoice(custom_server);
505 { 471 }
506 gGridName = "none"; 472 else if(server != 0)
507 } 473 {
508 else 474 LLViewerLogin::getInstance()->setGridChoice((EGridInfo)server);
509 {
510 gGridName = custom_server.c_str();
511 }
512 } 475 }
513
514 gSavedSettings.setString("GridChoice", gGridInfo[gGridChoice].mLabel);
515 } 476 }
516#endif 477#endif
517
518 if (gGridChoice == GRID_INFO_NONE)
519 {
520 gGridChoice = GridDefaultChoice;
521 gSavedSettings.setString("GridChoice", gGridInfo[gGridChoice].mLabel);
522 }
523} 478}
524 479
525bool send_url_to_other_instance(const std::string& url) 480bool send_url_to_other_instance(const std::string& url)
@@ -583,23 +538,22 @@ LLAppViewer::LLAppViewer() :
583 } 538 }
584 539
585 sInstance = this; 540 sInstance = this;
541
542 // Initialize the mainloop timeout.
543 mMainloopTimeout = new LLWatchdogTimeout();
586} 544}
587 545
588LLAppViewer::~LLAppViewer() 546LLAppViewer::~LLAppViewer()
589{ 547{
548 // Initialize the mainloop timeout.
549 delete mMainloopTimeout;
550
590 // If we got to this destructor somehow, the app didn't hang. 551 // If we got to this destructor somehow, the app didn't hang.
591 removeMarkerFile(); 552 removeMarkerFile();
592} 553}
593 554
594bool LLAppViewer::init() 555bool LLAppViewer::init()
595{ 556{
596 // *NOTE:Mani - LLCurl::initClass is not thread safe.
597 // Called before threads are created.
598 LLCurl::initClass();
599
600 initThreads();
601
602
603 // 557 //
604 // Start of the application 558 // Start of the application
605 // 559 //
@@ -612,7 +566,6 @@ bool LLAppViewer::init()
612 // that touches files should really go through the lldir API 566 // that touches files should really go through the lldir API
613 gDirUtilp->initAppDirs("SecondLife"); 567 gDirUtilp->initAppDirs("SecondLife");
614 568
615
616 initLogging(); 569 initLogging();
617 570
618 // 571 //
@@ -621,6 +574,12 @@ bool LLAppViewer::init()
621 if (!initConfiguration()) 574 if (!initConfiguration())
622 return false; 575 return false;
623 576
577 // *NOTE:Mani - LLCurl::initClass is not thread safe.
578 // Called before threads are created.
579 LLCurl::initClass();
580
581 initThreads();
582
624 writeSystemInfo(); 583 writeSystemInfo();
625 584
626 // Build a string representing the current version number. 585 // Build a string representing the current version number.
@@ -640,7 +599,7 @@ bool LLAppViewer::init()
640 // 599 //
641 // Various introspection concerning the libs we're using. 600 // Various introspection concerning the libs we're using.
642 // 601 //
643 llinfos << "J2C Engine is: " << LLImageJ2C::getEngineInfo() << llendl; 602 LL_DEBUGS("InitInfo") << "J2C Engine is: " << LLImageJ2C::getEngineInfo() << LL_ENDL;
644 603
645 // Get the single value from the crash settings file, if it exists 604 // Get the single value from the crash settings file, if it exists
646 std::string crash_settings_filename = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, CRASH_SETTINGS_FILE); 605 std::string crash_settings_filename = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, CRASH_SETTINGS_FILE);
@@ -683,15 +642,15 @@ bool LLAppViewer::init()
683 642
684 // Load art UUID information, don't require these strings to be declared in code. 643 // Load art UUID information, don't require these strings to be declared in code.
685 LLString colors_base_filename = gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS, "colors_base.xml"); 644 LLString colors_base_filename = gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS, "colors_base.xml");
686 llinfos << "Loading base colors from " << colors_base_filename << llendl; 645 LL_DEBUGS("InitInfo") << "Loading base colors from " << colors_base_filename << LL_ENDL;
687 gColors.loadFromFileLegacy(colors_base_filename.c_str(), FALSE, TYPE_COL4U); 646 gColors.loadFromFileLegacy(colors_base_filename.c_str(), FALSE, TYPE_COL4U);
688 647
689 // Load overrides from user colors file 648 // Load overrides from user colors file
690 LLString user_colors_filename = gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS, "colors.xml"); 649 LLString user_colors_filename = gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS, "colors.xml");
691 llinfos << "Loading user colors from " << user_colors_filename << llendl; 650 LL_DEBUGS("InitInfo") << "Loading user colors from " << user_colors_filename << LL_ENDL;
692 if (gColors.loadFromFileLegacy(user_colors_filename.c_str(), FALSE, TYPE_COL4U) == 0) 651 if (gColors.loadFromFileLegacy(user_colors_filename.c_str(), FALSE, TYPE_COL4U) == 0)
693 { 652 {
694 llinfos << "Cannot load user colors from " << user_colors_filename << llendl; 653 LL_DEBUGS("InitInfo") << "Cannot load user colors from " << user_colors_filename << LL_ENDL;
695 } 654 }
696 655
697 // Widget construction depends on LLUI being initialized 656 // Widget construction depends on LLUI being initialized
@@ -782,7 +741,7 @@ bool LLAppViewer::init()
782 #endif 741 #endif
783 742
784 gGLManager.getGLInfo(gDebugInfo); 743 gGLManager.getGLInfo(gDebugInfo);
785 llinfos << gGLManager.getGLInfoString() << llendl; 744 gGLManager.printGLInfoString();
786 745
787 //load key settings 746 //load key settings
788 bind_keyboard_functions(); 747 bind_keyboard_functions();
@@ -790,7 +749,7 @@ bool LLAppViewer::init()
790 // Load Default bindings 749 // Load Default bindings
791 if (!gViewerKeyboard.loadBindings(gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS,"keys.ini").c_str())) 750 if (!gViewerKeyboard.loadBindings(gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS,"keys.ini").c_str()))
792 { 751 {
793 llerrs << "Unable to open keys.ini" << llendl; 752 LL_ERRS("InitInfo") << "Unable to open keys.ini" << LL_ENDL;
794 } 753 }
795 // Load Custom bindings (override defaults) 754 // Load Custom bindings (override defaults)
796 gViewerKeyboard.loadBindings(gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS,"custom_keys.ini").c_str()); 755 gViewerKeyboard.loadBindings(gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS,"custom_keys.ini").c_str());
@@ -865,20 +824,16 @@ bool LLAppViewer::init()
865 gSimFrames = (F32)gFrameCount; 824 gSimFrames = (F32)gFrameCount;
866 825
867 LLViewerJoystick::getInstance()->init(false); 826 LLViewerJoystick::getInstance()->init(false);
868 if (LLViewerJoystick::getInstance()->isLikeSpaceNavigator()) 827
869 {
870 if (gSavedSettings.getString("JoystickInitialized") != "SpaceNavigator")
871 {
872 LLFloaterJoystick::setSNDefaults();
873 gSavedSettings.setString("JoystickInitialized", "SpaceNavigator");
874 }
875 }
876
877 return true; 828 return true;
878} 829}
879 830
880bool LLAppViewer::mainLoop() 831bool LLAppViewer::mainLoop()
881{ 832{
833 mMainloopTimeout = new LLWatchdogTimeout();
834 // *FIX:Mani - Make this a setting, once new settings exist in this branch.
835 mMainloopTimeout->setTimeout(5);
836
882 //------------------------------------------- 837 //-------------------------------------------
883 // Run main loop until time to quit 838 // Run main loop until time to quit
884 //------------------------------------------- 839 //-------------------------------------------
@@ -910,7 +865,7 @@ bool LLAppViewer::mainLoop()
910 { 865 {
911 LLFastTimer t2(LLFastTimer::FTM_MESSAGES); 866 LLFastTimer t2(LLFastTimer::FTM_MESSAGES);
912 #if LL_WINDOWS 867 #if LL_WINDOWS
913 if (!LLWinDebug::setupExceptionHandler()) 868 if (!LLWinDebug::checkExceptionHandler())
914 { 869 {
915 llwarns << " Someone took over my exception handler (post messagehandling)!" << llendl; 870 llwarns << " Someone took over my exception handler (post messagehandling)!" << llendl;
916 } 871 }
@@ -1059,6 +1014,8 @@ bool LLAppViewer::mainLoop()
1059 } 1014 }
1060 //LLVFSThread::sLocal->pause(); // Prevent the VFS thread from running while rendering. 1015 //LLVFSThread::sLocal->pause(); // Prevent the VFS thread from running while rendering.
1061 //LLLFSThread::sLocal->pause(); // Prevent the LFS thread from running while rendering. 1016 //LLLFSThread::sLocal->pause(); // Prevent the LFS thread from running while rendering.
1017
1018 mMainloopTimeout->ping();
1062 } 1019 }
1063 1020
1064 } 1021 }
@@ -1083,6 +1040,8 @@ bool LLAppViewer::mainLoop()
1083 1040
1084 delete gServicePump; 1041 delete gServicePump;
1085 1042
1043 mMainloopTimeout->stop();
1044
1086 llinfos << "Exiting main_loop" << llendflush; 1045 llinfos << "Exiting main_loop" << llendflush;
1087 1046
1088 return true; 1047 return true;
@@ -1346,7 +1305,9 @@ bool LLAppViewer::cleanup()
1346 gStaticVFS = NULL; 1305 gStaticVFS = NULL;
1347 delete gVFS; 1306 delete gVFS;
1348 gVFS = NULL; 1307 gVFS = NULL;
1349 1308
1309 LLWatchdog::getInstance()->cleanup();
1310
1350 end_messaging_system(); 1311 end_messaging_system();
1351 1312
1352 // *NOTE:Mani - The following call is not thread safe. 1313 // *NOTE:Mani - The following call is not thread safe.
@@ -1380,6 +1341,14 @@ bool LLAppViewer::initThreads()
1380#else 1341#else
1381 static const bool enable_threads = true; 1342 static const bool enable_threads = true;
1382#endif 1343#endif
1344
1345 const S32 NEVER_SUBMIT_REPORT = 2;
1346 if(TRUE == gSavedSettings.getBOOL("WatchdogEnabled")
1347 && (gCrashSettings.getS32("CrashSubmitBehavior") != NEVER_SUBMIT_REPORT))
1348 {
1349 LLWatchdog::getInstance()->init();
1350 }
1351
1383 LLVFSThread::initClass(enable_threads && true); 1352 LLVFSThread::initClass(enable_threads && true);
1384 LLLFSThread::initClass(enable_threads && true); 1353 LLLFSThread::initClass(enable_threads && true);
1385 1354
@@ -1434,7 +1403,7 @@ bool LLAppViewer::initLogging()
1434} 1403}
1435 1404
1436void LLAppViewer::loadSettingsFromDirectory(ELLPath path_index) 1405void LLAppViewer::loadSettingsFromDirectory(ELLPath path_index)
1437{ 1406{
1438 for(LLSD::map_iterator itr = mSettingsFileList.beginMap(); itr != mSettingsFileList.endMap(); ++itr) 1407 for(LLSD::map_iterator itr = mSettingsFileList.beginMap(); itr != mSettingsFileList.endMap(); ++itr)
1439 { 1408 {
1440 LLString settings_name = (*itr).first; 1409 LLString settings_name = (*itr).first;
@@ -1487,7 +1456,7 @@ std::string LLAppViewer::getSettingsFileName(const std::string& file)
1487} 1456}
1488 1457
1489bool LLAppViewer::initConfiguration() 1458bool LLAppViewer::initConfiguration()
1490{ 1459{
1491 //Set up internal pointers 1460 //Set up internal pointers
1492 gSettings[sGlobalSettingsName] = &gSavedSettings; 1461 gSettings[sGlobalSettingsName] = &gSavedSettings;
1493 gSettings[sPerAccountSettingsName] = &gSavedPerAccountSettings; 1462 gSettings[sPerAccountSettingsName] = &gSavedPerAccountSettings;
@@ -1523,30 +1492,17 @@ bool LLAppViewer::initConfiguration()
1523 1492
1524 gSavedSettings.setString("VersionChannelName", LL_CHANNEL); 1493 gSavedSettings.setString("VersionChannelName", LL_CHANNEL);
1525 1494
1526#ifndef LL_RELEASE_FOR_DOWNLOAD 1495#ifndef LL_RELEASE_FOR_DOWNLOAD
1527 gSavedSettings.setBOOL("ShowConsoleWindow", TRUE); 1496 gSavedSettings.setBOOL("ShowConsoleWindow", TRUE);
1528 gSavedSettings.setBOOL("AllowMultipleViewers", TRUE); 1497 gSavedSettings.setBOOL("AllowMultipleViewers", TRUE);
1529#endif 1498#endif
1530 1499
1531#if LL_WINDOWS 1500#if !LL_DYNAMIC_FONT_DISCOVERY
1532 // Lists Japanese, Korean, and Chinese sanserif fonts available in 1501 // static font discovery - user settings can override.
1533 // Windows XP and Vista, as well as "Arial Unicode MS".
1534 gSavedSettings.setString("FontSansSerifFallback", 1502 gSavedSettings.setString("FontSansSerifFallback",
1535 "MSGOTHIC.TTC;gulim.ttc;simhei.ttf;ArialUni.ttf"); 1503 LLWindow::getFontListSans());
1536#elif LL_DARWIN
1537 // This is a fairly complete Japanese font that ships with Mac OS X.
1538 // The first filename is in UTF8, but it shows up in the font menu as "Hiragino Kaku Gothic Pro W3".
1539 // The third filename is in UTF8, but it shows up in the font menu as "STHeiti Light"
1540 gSavedSettings.setString("FontSansSerifFallback",
1541 "\xE3\x83\x92\xE3\x83\xA9\xE3\x82\xAD\xE3\x82\x99\xE3\x83\x8E\xE8\xA7\x92\xE3\x82\xB3\xE3\x82\x99 Pro W3.otf;\xE3\x83\x92\xE3\x83\xA9\xE3\x82\xAD\xE3\x82\x99\xE3\x83\x8E\xE8\xA7\x92\xE3\x82\xB3\xE3\x82\x99 ProN W3.otf;AppleGothic.dfont;AppleGothic.ttf;\xe5\x8d\x8e\xe6\x96\x87\xe7\xbb\x86\xe9\xbb\x91.ttf");
1542#else
1543 // 'unicode.ttf' doesn't exist, but hopefully an international
1544 // user can take the hint and drop in their favourite local font.
1545 gSavedSettings.setString("FontSansSerifFallback",
1546 "unicode.ttf");
1547#endif 1504#endif
1548 1505
1549
1550 // These are warnings that appear on the first experience of that condition. 1506 // These are warnings that appear on the first experience of that condition.
1551 // They are already set in the settings_default.xml file, but still need to be added to LLFirstUse 1507 // They are already set in the settings_default.xml file, but still need to be added to LLFirstUse
1552 // for disable/reset ability 1508 // for disable/reset ability
@@ -1590,7 +1546,16 @@ bool LLAppViewer::initConfiguration()
1590 // Do this *before* loading the settings file 1546 // Do this *before* loading the settings file
1591 LLAlertDialog::parseAlerts("alerts.xml", &gSavedSettings, TRUE); 1547 LLAlertDialog::parseAlerts("alerts.xml", &gSavedSettings, TRUE);
1592 1548
1593 // - read command line settings 1549#if LL_DYNAMIC_FONT_DISCOVERY
1550 // Linux does *dynamic* font discovery which is preferable to
1551 // whatever got written-out into the config file last time. This
1552 // does remove the ability of the user to hand-define the fallbacks
1553 // though, so from a config-management point of view this is hacky.
1554 gSavedSettings.setString("FontSansSerifFallback",
1555 LLWindow::getFontListSans());
1556#endif
1557
1558 // - read command line settings.
1594 LLControlGroupCLP clp; 1559 LLControlGroupCLP clp;
1595 std::string cmd_line_config = gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS, 1560 std::string cmd_line_config = gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS,
1596 "cmd_line.xml"); 1561 "cmd_line.xml");
@@ -1769,18 +1734,6 @@ bool LLAppViewer::initConfiguration()
1769 } 1734 }
1770 } 1735 }
1771 1736
1772 const LLControlVariable* loginuri = gSavedSettings.getControl("LoginURI");
1773 if(loginuri && LLString::null != loginuri->getValue().asString())
1774 {
1775 addLoginURI(loginuri->getValue().asString());
1776 }
1777
1778 const LLControlVariable* helperuri = gSavedSettings.getControl("HelperURI");
1779 if(helperuri && LLString::null != helperuri->getValue().asString())
1780 {
1781 setHelperURI(helperuri->getValue().asString());
1782 }
1783
1784 const LLControlVariable* skinfolder = gSavedSettings.getControl("SkinFolder"); 1737 const LLControlVariable* skinfolder = gSavedSettings.getControl("SkinFolder");
1785 if(skinfolder && LLString::null != skinfolder->getValue().asString()) 1738 if(skinfolder && LLString::null != skinfolder->getValue().asString())
1786 { 1739 {
@@ -2025,7 +1978,7 @@ bool LLAppViewer::initConfiguration()
2025 1978
2026bool LLAppViewer::initWindow() 1979bool LLAppViewer::initWindow()
2027{ 1980{
2028 llinfos << "Initializing window..." << llendl; 1981 LL_INFOS("AppInit") << "Initializing window..." << LL_ENDL;
2029 1982
2030 // store setting in a global for easy access and modification 1983 // store setting in a global for easy access and modification
2031 gNoRender = gSavedSettings.getBOOL("DisableRendering"); 1984 gNoRender = gSavedSettings.getBOOL("DisableRendering");
@@ -2085,6 +2038,7 @@ bool LLAppViewer::initWindow()
2085 2038
2086 LLAlertDialog::parseAlerts("alerts.xml"); 2039 LLAlertDialog::parseAlerts("alerts.xml");
2087 LLNotifyBox::parseNotify("notify.xml"); 2040 LLNotifyBox::parseNotify("notify.xml");
2041 LLTrans::parseStrings("strings.xml");
2088 2042
2089 // Show watch cursor 2043 // Show watch cursor
2090 gViewerWindow->setCursor(UI_CURSOR_WAIT); 2044 gViewerWindow->setCursor(UI_CURSOR_WAIT);
@@ -2160,10 +2114,6 @@ void LLAppViewer::cleanupSavedSettings()
2160 { 2114 {
2161 gSavedSettings.setF32("RenderFarClip", gAgent.mDrawDistance); 2115 gSavedSettings.setF32("RenderFarClip", gAgent.mDrawDistance);
2162 } 2116 }
2163
2164 // *REMOVE: This is now done via LLAppViewer::setCrashBehavior()
2165 // Left vestigially in case I borked it.
2166 // gCrashSettings.setS32(CRASH_BEHAVIOR_SETTING, gCrashBehavior);
2167} 2117}
2168 2118
2169void LLAppViewer::removeCacheFiles(const char* file_mask) 2119void LLAppViewer::removeCacheFiles(const char* file_mask)
@@ -2194,22 +2144,22 @@ void LLAppViewer::writeSystemInfo()
2194 gDebugInfo["OSInfo"] = getOSInfo().getOSStringSimple(); 2144 gDebugInfo["OSInfo"] = getOSInfo().getOSStringSimple();
2195 2145
2196 // Dump some debugging info 2146 // Dump some debugging info
2197 llinfos << gSecondLife 2147 LL_INFOS("SystemInfo") << gSecondLife
2198 << " version " << LL_VERSION_MAJOR << "." << LL_VERSION_MINOR << "." << LL_VERSION_PATCH 2148 << " version " << LL_VERSION_MAJOR << "." << LL_VERSION_MINOR << "." << LL_VERSION_PATCH
2199 << llendl; 2149 << LL_ENDL;
2200 2150
2201 // Dump the local time and time zone 2151 // Dump the local time and time zone
2202 time_t now; 2152 time_t now;
2203 time(&now); 2153 time(&now);
2204 char tbuffer[256]; /* Flawfinder: ignore */ 2154 char tbuffer[256]; /* Flawfinder: ignore */
2205 strftime(tbuffer, 256, "%Y-%m-%dT%H:%M:%S %Z", localtime(&now)); 2155 strftime(tbuffer, 256, "%Y-%m-%dT%H:%M:%S %Z", localtime(&now));
2206 llinfos << "Local time: " << tbuffer << llendl; 2156 LL_INFOS("SystemInfo") << "Local time: " << tbuffer << LL_ENDL;
2207 2157
2208 // query some system information 2158 // query some system information
2209 llinfos << "CPU info:\n" << gSysCPU << llendl; 2159 LL_INFOS("SystemInfo") << "CPU info:\n" << gSysCPU << LL_ENDL;
2210 llinfos << "Memory info:\n" << gSysMemory << llendl; 2160 LL_INFOS("SystemInfo") << "Memory info:\n" << gSysMemory << LL_ENDL;
2211 llinfos << "OS: " << getOSInfo().getOSStringSimple() << llendl; 2161 LL_INFOS("SystemInfo") << "OS: " << getOSInfo().getOSStringSimple() << LL_ENDL;
2212 llinfos << "OS info: " << getOSInfo() << llendl; 2162 LL_INFOS("SystemInfo") << "OS info: " << getOSInfo() << LL_ENDL;
2213} 2163}
2214 2164
2215void LLAppViewer::handleSyncViewerCrash() 2165void LLAppViewer::handleSyncViewerCrash()
@@ -2221,6 +2171,8 @@ void LLAppViewer::handleSyncViewerCrash()
2221 2171
2222void LLAppViewer::handleViewerCrash() 2172void LLAppViewer::handleViewerCrash()
2223{ 2173{
2174 llinfos << "Handle viewer crash entry." << llendl;
2175
2224 LLAppViewer* pApp = LLAppViewer::instance(); 2176 LLAppViewer* pApp = LLAppViewer::instance();
2225 if (pApp->beingDebugged()) 2177 if (pApp->beingDebugged())
2226 { 2178 {
@@ -2287,11 +2239,11 @@ void LLAppViewer::handleViewerCrash()
2287 apr_file_t* crash_file = ll_apr_file_open(crash_file_name, LL_APR_W); 2239 apr_file_t* crash_file = ll_apr_file_open(crash_file_name, LL_APR_W);
2288 if (crash_file) 2240 if (crash_file)
2289 { 2241 {
2290 llinfos << "Created crash marker file " << crash_file_name << llendl; 2242 LL_INFOS("MarkerFile") << "Created crash marker file " << crash_file_name << LL_ENDL;
2291 } 2243 }
2292 else 2244 else
2293 { 2245 {
2294 llwarns << "Cannot create error marker file " << crash_file_name << llendl; 2246 LL_WARNS("MarkerFile") << "Cannot create error marker file " << crash_file_name << LL_ENDL;
2295 } 2247 }
2296 apr_file_close(crash_file); 2248 apr_file_close(crash_file);
2297 } 2249 }
@@ -2303,6 +2255,7 @@ void LLAppViewer::handleViewerCrash()
2303 llofstream file(filename.c_str(), llofstream::binary); 2255 llofstream file(filename.c_str(), llofstream::binary);
2304 if(file.good()) 2256 if(file.good())
2305 { 2257 {
2258 llinfos << "Handle viewer crash generating stats log." << llendl;
2306 gMessageSystem->summarizeLogs(file); 2259 gMessageSystem->summarizeLogs(file);
2307 file.close(); 2260 file.close();
2308 } 2261 }
@@ -2318,6 +2271,7 @@ void LLAppViewer::handleViewerCrash()
2318 2271
2319 // Close the debug file 2272 // Close the debug file
2320 pApp->closeDebug(); 2273 pApp->closeDebug();
2274
2321 LLError::logToFile(""); 2275 LLError::logToFile("");
2322 2276
2323 // Remove the marker file, since otherwise we'll spawn a process that'll keep it locked 2277 // Remove the marker file, since otherwise we'll spawn a process that'll keep it locked
@@ -2348,7 +2302,7 @@ bool LLAppViewer::anotherInstanceRunning()
2348 // If the file is currently locked, that means another process is already running. 2302 // If the file is currently locked, that means another process is already running.
2349 2303
2350 std::string marker_file = gDirUtilp->getExpandedFilename(LL_PATH_LOGS, MARKER_FILE_NAME); 2304 std::string marker_file = gDirUtilp->getExpandedFilename(LL_PATH_LOGS, MARKER_FILE_NAME);
2351 llinfos << "Checking marker file for lock..." << llendl; 2305 LL_DEBUGS("MarkerFile") << "Checking marker file for lock..." << LL_ENDL;
2352 2306
2353 //Freeze case checks 2307 //Freeze case checks
2354 apr_file_t* fMarker = ll_apr_file_open(marker_file, LL_APR_RB); 2308 apr_file_t* fMarker = ll_apr_file_open(marker_file, LL_APR_RB);
@@ -2360,19 +2314,19 @@ bool LLAppViewer::anotherInstanceRunning()
2360 if (fMarker == NULL) 2314 if (fMarker == NULL)
2361 { 2315 {
2362 // Another instance is running. Skip the rest of these operations. 2316 // Another instance is running. Skip the rest of these operations.
2363 llinfos << "Marker file is locked." << llendl; 2317 LL_INFOS("MarkerFile") << "Marker file is locked." << LL_ENDL;
2364 return TRUE; 2318 return TRUE;
2365 } 2319 }
2366 if (apr_file_lock(fMarker, APR_FLOCK_NONBLOCK | APR_FLOCK_EXCLUSIVE) != APR_SUCCESS) //flock(fileno(fMarker), LOCK_EX | LOCK_NB) == -1) 2320 if (apr_file_lock(fMarker, APR_FLOCK_NONBLOCK | APR_FLOCK_EXCLUSIVE) != APR_SUCCESS) //flock(fileno(fMarker), LOCK_EX | LOCK_NB) == -1)
2367 { 2321 {
2368 apr_file_close(fMarker); 2322 apr_file_close(fMarker);
2369 llinfos << "Marker file is locked." << llendl; 2323 LL_INFOS("MarkerFile") << "Marker file is locked." << LL_ENDL;
2370 return TRUE; 2324 return TRUE;
2371 } 2325 }
2372 // No other instances; we'll lock this file now & delete on quit. 2326 // No other instances; we'll lock this file now & delete on quit.
2373 apr_file_close(fMarker); 2327 apr_file_close(fMarker);
2374 } 2328 }
2375 llinfos << "Marker file isn't locked." << llendl; 2329 LL_DEBUGS("MarkerFile") << "Marker file isn't locked." << LL_ENDL;
2376 return FALSE; 2330 return FALSE;
2377} 2331}
2378 2332
@@ -2383,7 +2337,7 @@ void LLAppViewer::initMarkerFile()
2383 //There are marker files for two different types of crashes 2337 //There are marker files for two different types of crashes
2384 2338
2385 mMarkerFileName = gDirUtilp->getExpandedFilename(LL_PATH_LOGS,MARKER_FILE_NAME); 2339 mMarkerFileName = gDirUtilp->getExpandedFilename(LL_PATH_LOGS,MARKER_FILE_NAME);
2386 llinfos << "Checking marker file for lock..." << llendl; 2340 LL_DEBUGS("MarkerFile") << "Checking marker file for lock..." << LL_ENDL;
2387 2341
2388 //We've got 4 things to test for here 2342 //We've got 4 things to test for here
2389 // - Other Process Running (SecondLife.exec_marker present, locked) 2343 // - Other Process Running (SecondLife.exec_marker present, locked)
@@ -2401,7 +2355,7 @@ void LLAppViewer::initMarkerFile()
2401 if(fMarker != NULL) 2355 if(fMarker != NULL)
2402 { 2356 {
2403 apr_file_close(fMarker); 2357 apr_file_close(fMarker);
2404 llinfos << "Last exec LLError crashed, setting LastExecEvent to " << LAST_EXEC_LLERROR_CRASH << llendl; 2358 LL_INFOS("MarkerFile") << "Last exec LLError crashed, setting LastExecEvent to " << LAST_EXEC_LLERROR_CRASH << LL_ENDL;
2405 gLastExecEvent = LAST_EXEC_LOGOUT_FROZE; 2359 gLastExecEvent = LAST_EXEC_LOGOUT_FROZE;
2406 } 2360 }
2407 fMarker = ll_apr_file_open(llerror_marker_file, LL_APR_RB); 2361 fMarker = ll_apr_file_open(llerror_marker_file, LL_APR_RB);
@@ -2416,7 +2370,7 @@ void LLAppViewer::initMarkerFile()
2416 if(fMarker != NULL) 2370 if(fMarker != NULL)
2417 { 2371 {
2418 apr_file_close(fMarker); 2372 apr_file_close(fMarker);
2419 llinfos << "Last exec crashed, setting LastExecEvent to " << LAST_EXEC_OTHER_CRASH << llendl; 2373 LL_INFOS("MarkerFile") << "Last exec crashed, setting LastExecEvent to " << LAST_EXEC_OTHER_CRASH << LL_ENDL;
2420 if(gLastExecEvent == LAST_EXEC_LOGOUT_FROZE) gLastExecEvent = LAST_EXEC_LOGOUT_CRASH; 2374 if(gLastExecEvent == LAST_EXEC_LOGOUT_FROZE) gLastExecEvent = LAST_EXEC_LOGOUT_CRASH;
2421 else gLastExecEvent = LAST_EXEC_OTHER_CRASH; 2375 else gLastExecEvent = LAST_EXEC_OTHER_CRASH;
2422 } 2376 }
@@ -2436,34 +2390,33 @@ void LLAppViewer::initMarkerFile()
2436 { 2390 {
2437 apr_file_close(fMarker); 2391 apr_file_close(fMarker);
2438 gLastExecEvent = LAST_EXEC_FROZE; 2392 gLastExecEvent = LAST_EXEC_FROZE;
2439 llinfos << "Exec marker found: program froze on previous execution" << llendl; 2393 LL_INFOS("MarkerFile") << "Exec marker found: program froze on previous execution" << LL_ENDL;
2440 } 2394 }
2441 2395
2442 // Create the marker file for this execution & lock it 2396 // Create the marker file for this execution & lock it
2443 mMarkerFile = ll_apr_file_open(mMarkerFileName, LL_APR_W); 2397 mMarkerFile = ll_apr_file_open(mMarkerFileName, LL_APR_W);
2444 if (mMarkerFile) 2398 if (mMarkerFile)
2445 { 2399 {
2446 llinfos << "Marker file created." << llendl; 2400 LL_DEBUGS("MarkerFile") << "Marker file created." << LL_ENDL;
2447 } 2401 }
2448 else 2402 else
2449 { 2403 {
2450 llinfos << "Failed to create marker file." << llendl; 2404 LL_INFOS("MarkerFile") << "Failed to create marker file." << LL_ENDL;
2451 return; 2405 return;
2452 } 2406 }
2453 if (apr_file_lock(mMarkerFile, APR_FLOCK_NONBLOCK | APR_FLOCK_EXCLUSIVE) != APR_SUCCESS) 2407 if (apr_file_lock(mMarkerFile, APR_FLOCK_NONBLOCK | APR_FLOCK_EXCLUSIVE) != APR_SUCCESS)
2454 { 2408 {
2455 apr_file_close(mMarkerFile); 2409 apr_file_close(mMarkerFile);
2456 llinfos << "Marker file cannot be locked." << llendl; 2410 LL_INFOS("MarkerFile") << "Marker file cannot be locked." << LL_ENDL;
2457 return; 2411 return;
2458 } 2412 }
2459 2413
2460 llinfos << "Marker file locked." << llendl; 2414 LL_DEBUGS("MarkerFile") << "Marker file locked." << LL_ENDL;
2461 llinfos << "Exiting initMarkerFile()." << llendl;
2462} 2415}
2463 2416
2464void LLAppViewer::removeMarkerFile(bool leave_logout_marker) 2417void LLAppViewer::removeMarkerFile(bool leave_logout_marker)
2465{ 2418{
2466 llinfos << "removeMarkerFile()" << llendl; 2419 LL_DEBUGS("MarkerFile") << "removeMarkerFile()" << LL_ENDL;
2467 if (mMarkerFile != NULL) 2420 if (mMarkerFile != NULL)
2468 { 2421 {
2469 ll_apr_file_remove( mMarkerFileName ); 2422 ll_apr_file_remove( mMarkerFileName );
@@ -2588,7 +2541,7 @@ bool LLAppViewer::initCache()
2588 2541
2589 if (!gDirUtilp->setCacheDir(gSavedSettings.getString("CacheLocation"))) 2542 if (!gDirUtilp->setCacheDir(gSavedSettings.getString("CacheLocation")))
2590 { 2543 {
2591 llwarns << "Unable to set cache location" << llendl; 2544 LL_WARNS("AppCache") << "Unable to set cache location" << LL_ENDL;
2592 gSavedSettings.setString("CacheLocation", ""); 2545 gSavedSettings.setString("CacheLocation", "");
2593 } 2546 }
2594 2547
@@ -2625,7 +2578,7 @@ bool LLAppViewer::initCache()
2625 { 2578 {
2626 gSavedSettings.setU32("VFSOldSize", vfs_size_u32/MB); 2579 gSavedSettings.setU32("VFSOldSize", vfs_size_u32/MB);
2627 } 2580 }
2628 llinfos << "VFS CACHE SIZE: " << vfs_size/(1024*1024) << " MB" << llendl; 2581 LL_INFOS("AppCache") << "VFS CACHE SIZE: " << vfs_size/(1024*1024) << " MB" << LL_ENDL;
2629 2582
2630 // This has to happen BEFORE starting the vfs 2583 // This has to happen BEFORE starting the vfs
2631 //time_t ltime; 2584 //time_t ltime;
@@ -2689,8 +2642,7 @@ bool LLAppViewer::initCache()
2689 { 2642 {
2690 sscanf(found_file.c_str() + start_pos, "%d", &old_salt); 2643 sscanf(found_file.c_str() + start_pos, "%d", &old_salt);
2691 } 2644 }
2692 llinfos << "Default vfs data file not present, found " << old_vfs_data_file << llendl; 2645 LL_DEBUGS("AppCache") << "Default vfs data file not present, found: " << old_vfs_data_file << " Old salt: " << old_salt << llendl;
2693 llinfos << "Old salt: " << old_salt << llendl;
2694 } 2646 }
2695 } 2647 }
2696 2648
@@ -2702,8 +2654,8 @@ bool LLAppViewer::initCache()
2702 if (stat_result) 2654 if (stat_result)
2703 { 2655 {
2704 // We've got a bad/missing index file, nukem! 2656 // We've got a bad/missing index file, nukem!
2705 llwarns << "Bad or missing vfx index file " << old_vfs_index_file << llendl; 2657 LL_WARNS("AppCache") << "Bad or missing vfx index file " << old_vfs_index_file << LL_ENDL;
2706 llwarns << "Removing old vfs data file " << old_vfs_data_file << llendl; 2658 LL_WARNS("AppCache") << "Removing old vfs data file " << old_vfs_data_file << LL_ENDL;
2707 LLFile::remove(old_vfs_data_file); 2659 LLFile::remove(old_vfs_data_file);
2708 LLFile::remove(old_vfs_index_file); 2660 LLFile::remove(old_vfs_index_file);
2709 2661
@@ -2740,7 +2692,7 @@ bool LLAppViewer::initCache()
2740 2692
2741 if (resize_vfs) 2693 if (resize_vfs)
2742 { 2694 {
2743 llinfos << "Removing old vfs and re-sizing" << llendl; 2695 LL_DEBUGS("AppCache") << "Removing old vfs and re-sizing" << LL_ENDL;
2744 2696
2745 LLFile::remove(old_vfs_data_file); 2697 LLFile::remove(old_vfs_data_file);
2746 LLFile::remove(old_vfs_index_file); 2698 LLFile::remove(old_vfs_index_file);
@@ -2748,8 +2700,8 @@ bool LLAppViewer::initCache()
2748 else if (old_salt != new_salt) 2700 else if (old_salt != new_salt)
2749 { 2701 {
2750 // move the vfs files to a new name before opening 2702 // move the vfs files to a new name before opening
2751 llinfos << "Renaming " << old_vfs_data_file << " to " << new_vfs_data_file << llendl; 2703 LL_DEBUGS("AppCache") << "Renaming " << old_vfs_data_file << " to " << new_vfs_data_file << LL_ENDL;
2752 llinfos << "Renaming " << old_vfs_index_file << " to " << new_vfs_index_file << llendl; 2704 LL_DEBUGS("AppCache") << "Renaming " << old_vfs_index_file << " to " << new_vfs_index_file << LL_ENDL;
2753 LLFile::rename(old_vfs_data_file, new_vfs_data_file); 2705 LLFile::rename(old_vfs_data_file, new_vfs_data_file);
2754 LLFile::rename(old_vfs_index_file, new_vfs_index_file); 2706 LLFile::rename(old_vfs_index_file, new_vfs_index_file);
2755 } 2707 }
@@ -2763,7 +2715,7 @@ bool LLAppViewer::initCache()
2763 { 2715 {
2764 // Try again with fresh files 2716 // Try again with fresh files
2765 // (The constructor deletes corrupt files when it finds them.) 2717 // (The constructor deletes corrupt files when it finds them.)
2766 llwarns << "VFS corrupt, deleted. Making new VFS." << llendl; 2718 LL_WARNS("AppCache") << "VFS corrupt, deleted. Making new VFS." << LL_ENDL;
2767 delete gVFS; 2719 delete gVFS;
2768 gVFS = new LLVFS(new_vfs_index_file, new_vfs_data_file, false, vfs_size_u32, false); 2720 gVFS = new LLVFS(new_vfs_index_file, new_vfs_data_file, false, vfs_size_u32, false);
2769 } 2721 }
@@ -2784,9 +2736,8 @@ bool LLAppViewer::initCache()
2784 2736
2785void LLAppViewer::purgeCache() 2737void LLAppViewer::purgeCache()
2786{ 2738{
2787 llinfos << "Purging Texture Cache..." << llendl; 2739 LL_INFOS("AppCache") << "Purging Cache and Texture Cache..." << llendl;
2788 LLAppViewer::getTextureCache()->purgeCache(LL_PATH_CACHE); 2740 LLAppViewer::getTextureCache()->purgeCache(LL_PATH_CACHE);
2789 llinfos << "Purging Cache..." << llendl;
2790 std::string mask = gDirUtilp->getDirDelimiter() + "*.*"; 2741 std::string mask = gDirUtilp->getDirDelimiter() + "*.*";
2791 gDirUtilp->deleteFilesInDir(gDirUtilp->getExpandedFilename(LL_PATH_CACHE,"").c_str(),mask); 2742 gDirUtilp->deleteFilesInDir(gDirUtilp->getExpandedFilename(LL_PATH_CACHE,"").c_str(),mask);
2792} 2743}
@@ -2801,61 +2752,6 @@ const LLString& LLAppViewer::getWindowTitle() const
2801 return gWindowTitle; 2752 return gWindowTitle;
2802} 2753}
2803 2754
2804void LLAppViewer::resetURIs() const
2805{
2806 // Clear URIs when picking a new server
2807 gLoginURIs.clear();
2808 gHelperURI.clear();
2809}
2810
2811const std::vector<std::string>& LLAppViewer::getLoginURIs() const
2812{
2813 if (gLoginURIs.empty())
2814 {
2815 // not specified on the command line, use value from table
2816 gLoginURIs.push_back(gGridInfo[gGridChoice].mLoginURI);
2817 }
2818 return gLoginURIs;
2819}
2820
2821const std::string& LLAppViewer::getHelperURI() const
2822{
2823 if (gHelperURI.empty())
2824 {
2825 // not specified on the command line, use value from table
2826 gHelperURI = gGridInfo[gGridChoice].mHelperURI;
2827 }
2828 return gHelperURI;
2829}
2830
2831void LLAppViewer::addLoginURI(const std::string& uri)
2832{
2833 // *NOTE:Mani - login uri trumps the --grid (gGridChoice) setting.
2834 // Update gGridChoice to reflect the loginURI setting.
2835 gLoginURIs.push_back(uri);
2836
2837 const std::string& top_uri = getLoginURIs()[0];
2838 int i = 0;
2839 for(; i < GRID_INFO_COUNT; ++i)
2840 {
2841 if(top_uri == gGridInfo[i].mLoginURI)
2842 {
2843 gGridChoice = (EGridInfo)i;
2844 break;
2845 }
2846 }
2847
2848 if(GRID_INFO_COUNT == i)
2849 {
2850 gGridChoice = GRID_INFO_OTHER;
2851 }
2852}
2853
2854void LLAppViewer::setHelperURI(const std::string& uri)
2855{
2856 gHelperURI = uri;
2857}
2858
2859// Callback from a dialog indicating user was logged out. 2755// Callback from a dialog indicating user was logged out.
2860void finish_disconnect(S32 option, void* userdata) 2756void finish_disconnect(S32 option, void* userdata)
2861{ 2757{
@@ -2916,7 +2812,7 @@ void LLAppViewer::badNetworkHandler()
2916 2812
2917#if LL_WINDOWS 2813#if LL_WINDOWS
2918 // Generates the minidump. 2814 // Generates the minidump.
2919 LLWinDebug::handleException(NULL); 2815 LLWinDebug::generateCrashStacks(NULL);
2920#endif 2816#endif
2921 LLAppViewer::handleSyncViewerCrash(); 2817 LLAppViewer::handleSyncViewerCrash();
2922 LLAppViewer::handleViewerCrash(); 2818 LLAppViewer::handleViewerCrash();
@@ -2972,7 +2868,7 @@ void LLAppViewer::loadNameCache()
2972 2868
2973 // Try to load from the legacy format. This should go away after a 2869 // Try to load from the legacy format. This should go away after a
2974 // while. Phoenix 2008-01-30 2870 // while. Phoenix 2008-01-30
2975 FILE* name_cache_fp = LLFile::fopen(name_cache.c_str(), "r"); // Flawfinder: ignore 2871 LLFILE* name_cache_fp = LLFile::fopen(name_cache.c_str(), "r"); // Flawfinder: ignore
2976 if (name_cache_fp) 2872 if (name_cache_fp)
2977 { 2873 {
2978 gCacheName->importFile(name_cache_fp); 2874 gCacheName->importFile(name_cache_fp);
@@ -2993,15 +2889,6 @@ void LLAppViewer::saveNameCache()
2993 } 2889 }
2994} 2890}
2995 2891
2996bool LLAppViewer::isInProductionGrid()
2997{
2998 // *NOTE:Mani This used to compare GRID_INFO_AGNI to gGridChoice,
2999 // but it seems that loginURI trumps that.
3000 const std::string& loginURI = getLoginURIs()[0];
3001 return (loginURI == gGridInfo[GRID_INFO_AGNI].mLoginURI);
3002}
3003
3004
3005/*! @brief This class is an LLFrameTimer that can be created with 2892/*! @brief This class is an LLFrameTimer that can be created with
3006 an elapsed time that starts counting up from the given value 2893 an elapsed time that starts counting up from the given value
3007 rather than 0.0. 2894 rather than 0.0.
@@ -3694,3 +3581,19 @@ void LLAppViewer::forceErrorSoftwareException()
3694 // *FIX: Any way to insure it won't be handled? 3581 // *FIX: Any way to insure it won't be handled?
3695 throw; 3582 throw;
3696} 3583}
3584
3585void LLAppViewer::startMainloopTimeout(F32 secs)
3586{
3587 if(secs < 0.0f)
3588 {
3589 secs = gSavedSettings.getF32("MainloopTimeoutDefault");
3590 }
3591
3592 mMainloopTimeout->setTimeout(secs);
3593 mMainloopTimeout->start();
3594}
3595
3596void LLAppViewer::stopMainloopTimeout()
3597{
3598 mMainloopTimeout->stop();
3599}
diff --git a/linden/indra/newview/llappviewer.h b/linden/indra/newview/llappviewer.h
index b3f3681..160f2c8 100644
--- a/linden/indra/newview/llappviewer.h
+++ b/linden/indra/newview/llappviewer.h
@@ -35,7 +35,7 @@
35class LLTextureCache; 35class LLTextureCache;
36class LLWorkerThread; 36class LLWorkerThread;
37class LLTextureFetch; 37class LLTextureFetch;
38 38class LLWatchdogTimeout;
39class LLCommandLineParser; 39class LLCommandLineParser;
40 40
41class LLAppViewer : public LLApp 41class LLAppViewer : public LLApp
@@ -96,13 +96,6 @@ public:
96 const LLString& getSecondLifeTitle() const; // The Second Life title. 96 const LLString& getSecondLifeTitle() const; // The Second Life title.
97 const LLString& getWindowTitle() const; // The window display name. 97 const LLString& getWindowTitle() const; // The window display name.
98 98
99 // Helpers for URIs
100 void addLoginURI(const std::string& uri);
101 void setHelperURI(const std::string& uri);
102 const std::vector<std::string>& getLoginURIs() const;
103 const std::string& getHelperURI() const;
104 void resetURIs() const;
105
106 void forceDisconnect(const LLString& msg); // Force disconnection, with a message to the user. 99 void forceDisconnect(const LLString& msg); // Force disconnection, with a message to the user.
107 void badNetworkHandler(); // Cause a crash state due to bad network packet. 100 void badNetworkHandler(); // Cause a crash state due to bad network packet.
108 101
@@ -112,8 +105,6 @@ public:
112 void loadNameCache(); 105 void loadNameCache();
113 void saveNameCache(); 106 void saveNameCache();
114 107
115 bool isInProductionGrid();
116
117 void removeMarkerFile(bool leave_logout_marker = false); 108 void removeMarkerFile(bool leave_logout_marker = false);
118 109
119 // LLAppViewer testing helpers. 110 // LLAppViewer testing helpers.
@@ -137,6 +128,11 @@ public:
137 128
138 std::string getSettingsFileName(const std::string& file); 129 std::string getSettingsFileName(const std::string& file);
139 130
131 // For thread debugging.
132 // llstartup needs to control this.
133 // llworld, send_agent_pause() also controls this.
134 void startMainloopTimeout(F32 secs = -1.0f);
135 void stopMainloopTimeout();
140 136
141protected: 137protected:
142 virtual bool initWindow(); // Initialize the viewer's window. 138 virtual bool initWindow(); // Initialize the viewer's window.
@@ -154,6 +150,7 @@ private:
154 150
155 bool initThreads(); // Initialize viewer threads, return false on failure. 151 bool initThreads(); // Initialize viewer threads, return false on failure.
156 bool initConfiguration(); // Initialize settings from the command line/config file. 152 bool initConfiguration(); // Initialize settings from the command line/config file.
153 void initGridChoice();
157 154
158 bool initCache(); // Initialize local client cache. 155 bool initCache(); // Initialize local client cache.
159 void purgeCache(); // Clear the local cache. 156 void purgeCache(); // Clear the local cache.
@@ -207,6 +204,8 @@ private:
207 bool mLogoutRequestSent; // Disconnect message sent to simulator, no longer safe to send messages to the sim. 204 bool mLogoutRequestSent; // Disconnect message sent to simulator, no longer safe to send messages to the sim.
208 S32 mYieldTime; 205 S32 mYieldTime;
209 LLSD mSettingsFileList; 206 LLSD mSettingsFileList;
207
208 LLWatchdogTimeout* mMainloopTimeout;
210}; 209};
211 210
212// consts from viewer.h 211// consts from viewer.h
diff --git a/linden/indra/newview/llappviewerlinux.cpp b/linden/indra/newview/llappviewerlinux.cpp
index 084df9b..e41c505 100644
--- a/linden/indra/newview/llappviewerlinux.cpp
+++ b/linden/indra/newview/llappviewerlinux.cpp
@@ -37,7 +37,9 @@
37 37
38#include "llmemtype.h" 38#include "llmemtype.h"
39#include "llviewernetwork.h" 39#include "llviewernetwork.h"
40#include "llviewercontrol.h"
40#include "llmd5.h" 41#include "llmd5.h"
42#include "llfindlocale.h"
41 43
42#include <exception> 44#include <exception>
43 45
@@ -129,7 +131,7 @@ static inline BOOL do_basic_glibc_backtrace()
129 131
130 std::string strace_filename = gDirUtilp->getExpandedFilename(LL_PATH_LOGS,"stack_trace.log"); 132 std::string strace_filename = gDirUtilp->getExpandedFilename(LL_PATH_LOGS,"stack_trace.log");
131 llinfos << "Opening stack trace file " << strace_filename << llendl; 133 llinfos << "Opening stack trace file " << strace_filename << llendl;
132 FILE* StraceFile = LLFile::fopen(strace_filename.c_str(), "w"); 134 LLFILE* StraceFile = LLFile::fopen(strace_filename.c_str(), "w");
133 if (!StraceFile) 135 if (!StraceFile)
134 { 136 {
135 llinfos << "Opening stack trace file " << strace_filename << " failed. Using stderr." << llendl; 137 llinfos << "Opening stack trace file " << strace_filename << " failed. Using stderr." << llendl;
@@ -160,7 +162,7 @@ static inline BOOL do_basic_glibc_backtrace()
160 162
161 std::string strace_filename = gDirUtilp->getExpandedFilename(LL_PATH_LOGS,"stack_trace.log"); 163 std::string strace_filename = gDirUtilp->getExpandedFilename(LL_PATH_LOGS,"stack_trace.log");
162 llinfos << "Opening stack trace file " << strace_filename << llendl; 164 llinfos << "Opening stack trace file " << strace_filename << llendl;
163 FILE* StraceFile = LLFile::fopen(strace_filename.c_str(), "w"); // Flawfinder: ignore 165 LLFILE* StraceFile = LLFile::fopen(strace_filename.c_str(), "w"); // Flawfinder: ignore
164 if (!StraceFile) 166 if (!StraceFile)
165 { 167 {
166 llinfos << "Opening stack trace file " << strace_filename << " failed. Using stderr." << llendl; 168 llinfos << "Opening stack trace file " << strace_filename << " failed. Using stderr." << llendl;
@@ -198,7 +200,7 @@ static inline BOOL do_elfio_glibc_backtrace()
198 200
199 std::string strace_filename = gDirUtilp->getExpandedFilename(LL_PATH_LOGS,"stack_trace.log"); 201 std::string strace_filename = gDirUtilp->getExpandedFilename(LL_PATH_LOGS,"stack_trace.log");
200 llinfos << "Opening stack trace file " << strace_filename << llendl; 202 llinfos << "Opening stack trace file " << strace_filename << llendl;
201 FILE* StraceFile = LLFile::fopen(strace_filename.c_str(), "w"); // Flawfinder: ignore 203 LLFILE* StraceFile = LLFile::fopen(strace_filename.c_str(), "w"); // Flawfinder: ignore
202 if (!StraceFile) 204 if (!StraceFile)
203 { 205 {
204 llinfos << "Opening stack trace file " << strace_filename << " failed. Using stderr." << llendl; 206 llinfos << "Opening stack trace file " << strace_filename << " failed. Using stderr." << llendl;
@@ -346,7 +348,7 @@ void LLAppViewerLinux::handleCrashReporting()
346 {(char*)cmd.c_str(), 348 {(char*)cmd.c_str(),
347 ask_dialog, 349 ask_dialog,
348 (char*)"-user", 350 (char*)"-user",
349 (char*)gGridName.c_str(), 351 (char*)LLViewerLogin::getInstance()->getGridLabel().c_str(),
350 (char*)"-name", 352 (char*)"-name",
351 (char*)LLAppViewer::instance()->getSecondLifeTitle().c_str(), 353 (char*)LLAppViewer::instance()->getSecondLifeTitle().c_str(),
352 NULL}; 354 NULL};
@@ -432,7 +434,27 @@ bool LLAppViewerLinux::initLogging()
432 434
433bool LLAppViewerLinux::initParseCommandLine(LLCommandLineParser& clp) 435bool LLAppViewerLinux::initParseCommandLine(LLCommandLineParser& clp)
434{ 436{
435 clp.parseCommandLine(gArgC, gArgV); 437 if (!clp.parseCommandLine(gArgC, gArgV))
438 {
439 return false;
440 }
441
442 // Find the system language.
443 FL_Locale *locale = NULL;
444 FL_Success success = FL_FindLocale(&locale, FL_MESSAGES);
445 if (success != 0)
446 {
447 if (success >= 2 && locale->lang) // confident!
448 {
449 LLControlVariable* c = gSavedSettings.getControl("SystemLanguage");
450 if(c)
451 {
452 c->setValue(std::string(locale->lang), false);
453 }
454 }
455 FL_FreeLocale(&locale);
456 }
457
436 return true; 458 return true;
437} 459}
438 460
diff --git a/linden/indra/newview/llappviewermacosx.cpp b/linden/indra/newview/llappviewermacosx.cpp
index c128634..96b6b24 100644
--- a/linden/indra/newview/llappviewermacosx.cpp
+++ b/linden/indra/newview/llappviewermacosx.cpp
@@ -47,7 +47,7 @@
47#include "llfloaterworldmap.h" 47#include "llfloaterworldmap.h"
48#include "llurldispatcher.h" 48#include "llurldispatcher.h"
49#include <Carbon/Carbon.h> 49#include <Carbon/Carbon.h>
50 50#include "lldir.h"
51namespace 51namespace
52{ 52{
53 // The command line args stored. 53 // The command line args stored.
@@ -197,12 +197,13 @@ void LLAppViewerMacOSX::handleCrashReporting()
197{ 197{
198 // Macintosh 198 // Macintosh
199 LLString command_str; 199 LLString command_str;
200 command_str = "open crashreporter.app"; 200 command_str += "open crashreporter.app";
201
202 clear_signals();
203 llinfos << "Launching crash reporter using: '" << command_str << "'" << llendl;
201 system(command_str.c_str()); /* Flawfinder: ignore */ 204 system(command_str.c_str()); /* Flawfinder: ignore */
202 205 llinfos << "returned from crash reporter... dying" << llendl;
203 // Sometimes signals don't seem to quit the viewer. 206 _exit(1);
204 // Make sure we exit so as to not totally confuse the user.
205 exit(1);
206} 207}
207 208
208std::string LLAppViewerMacOSX::generateSerialNumber() 209std::string LLAppViewerMacOSX::generateSerialNumber()
diff --git a/linden/indra/newview/llappviewerwin32.cpp b/linden/indra/newview/llappviewerwin32.cpp
index a2d89a3..59883e5 100644
--- a/linden/indra/newview/llappviewerwin32.cpp
+++ b/linden/indra/newview/llappviewerwin32.cpp
@@ -54,9 +54,23 @@
54 54
55#include "llviewernetwork.h" 55#include "llviewernetwork.h"
56#include "llmd5.h" 56#include "llmd5.h"
57#include "llfindlocale.h"
57 58
58#include "llcommandlineparser.h" 59#include "llcommandlineparser.h"
59 60
61//*FIX:Mani - This hack is to fix a linker issue with libndofdev.lib
62// The lib was compiled under VS2005 - in VS2003 we need to remap assert
63#ifdef LL_DEBUG
64 #if (_MSC_VER < 1400)
65 extern "C" {
66 void _wassert(const wchar_t * _Message, const wchar_t *_File, unsigned _Line)
67 {
68 llerrs << _Message << llendl;
69 }
70 }
71 #endif
72#endif
73
60LONG WINAPI viewer_windows_exception_handler(struct _EXCEPTION_POINTERS *exception_infop) 74LONG WINAPI viewer_windows_exception_handler(struct _EXCEPTION_POINTERS *exception_infop)
61{ 75{
62 // *NOTE:Mani - this code is stolen from LLApp, where its never actually used. 76 // *NOTE:Mani - this code is stolen from LLApp, where its never actually used.
@@ -78,7 +92,7 @@ LONG WINAPI viewer_windows_exception_handler(struct _EXCEPTION_POINTERS *excepti
78 // Generate a minidump if we can. 92 // Generate a minidump if we can.
79 // Before we wake the error thread... 93 // Before we wake the error thread...
80 // Which will start the crash reporting. 94 // Which will start the crash reporting.
81 LLWinDebug::handleException(exception_infop); 95 LLWinDebug::generateCrashStacks(exception_infop);
82 96
83 // Flag status to error, so thread_error starts its work 97 // Flag status to error, so thread_error starts its work
84 LLApp::setError(); 98 LLApp::setError();
@@ -118,27 +132,11 @@ int APIENTRY WINMAIN(HINSTANCE hInstance,
118 132
119 LLAppViewerWin32* viewer_app_ptr = new LLAppViewerWin32(lpCmdLine); 133 LLAppViewerWin32* viewer_app_ptr = new LLAppViewerWin32(lpCmdLine);
120 134
121 // *FIX:Mani This method is poorly named, since the exception 135 LLWinDebug::initExceptionHandler(viewer_windows_exception_handler);
122 // is now handled by LLApp.
123 bool ok = LLWinDebug::setupExceptionHandler();
124 136
125 // Actually here's the exception setup.
126 LPTOP_LEVEL_EXCEPTION_FILTER prev_filter;
127 prev_filter = SetUnhandledExceptionFilter(viewer_windows_exception_handler);
128 if (!prev_filter)
129 {
130 llwarns << "Our exception handler (" << (void *)LLWinDebug::handleException << ") replaced with NULL!" << llendl;
131 ok = FALSE;
132 }
133 if (prev_filter != LLWinDebug::handleException)
134 {
135 llwarns << "Our exception handler (" << (void *)LLWinDebug::handleException << ") replaced with " << prev_filter << "!" << llendl;
136 ok = FALSE;
137 }
138
139 viewer_app_ptr->setErrorHandler(LLAppViewer::handleViewerCrash); 137 viewer_app_ptr->setErrorHandler(LLAppViewer::handleViewerCrash);
140 138
141 ok = viewer_app_ptr->init(); 139 bool ok = viewer_app_ptr->init();
142 if(!ok) 140 if(!ok)
143 { 141 {
144 llwarns << "Application init failed." << llendl; 142 llwarns << "Application init failed." << llendl;
@@ -326,14 +324,14 @@ bool LLAppViewerWin32::initHardwareTest()
326 324
327 LLSplashScreen::update("Detecting hardware..."); 325 LLSplashScreen::update("Detecting hardware...");
328 326
329 llinfos << "Attempting to poll DirectX for hardware info" << llendl; 327 LL_DEBUGS("AppInit") << "Attempting to poll DirectX for hardware info" << LL_ENDL;
330 gDXHardware.setWriteDebugFunc(write_debug_dx); 328 gDXHardware.setWriteDebugFunc(write_debug_dx);
331 BOOL probe_ok = gDXHardware.getInfo(vram_only); 329 BOOL probe_ok = gDXHardware.getInfo(vram_only);
332 330
333 if (!probe_ok 331 if (!probe_ok
334 && gSavedSettings.getWarning("AboutDirectX9")) 332 && gSavedSettings.getWarning("AboutDirectX9"))
335 { 333 {
336 llinfos << "DirectX probe failed, alerting user." << llendl; 334 LL_WARNS("AppInit") << "DirectX probe failed, alerting user." << LL_ENDL;
337 335
338 // Warn them that runnin without DirectX 9 will 336 // Warn them that runnin without DirectX 9 will
339 // not allow us to tell them about driver issues 337 // not allow us to tell them about driver issues
@@ -354,13 +352,13 @@ bool LLAppViewerWin32::initHardwareTest()
354 OSMB_YESNO); 352 OSMB_YESNO);
355 if (OSBTN_NO== button) 353 if (OSBTN_NO== button)
356 { 354 {
357 llinfos << "User quitting after failed DirectX 9 detection" << llendl; 355 LL_INFOS("AppInit") << "User quitting after failed DirectX 9 detection" << LL_ENDL;
358 LLWeb::loadURLExternal(DIRECTX_9_URL); 356 LLWeb::loadURLExternal(DIRECTX_9_URL);
359 return false; 357 return false;
360 } 358 }
361 gSavedSettings.setWarning("AboutDirectX9", FALSE); 359 gSavedSettings.setWarning("AboutDirectX9", FALSE);
362 } 360 }
363 llinfos << "Done polling DirectX for hardware info" << llendl; 361 LL_DEBUGS("AppInit") << "Done polling DirectX for hardware info" << LL_ENDL;
364 362
365 // Only probe once after installation 363 // Only probe once after installation
366 gSavedSettings.setBOOL("ProbeHardwareOnStartup", FALSE); 364 gSavedSettings.setBOOL("ProbeHardwareOnStartup", FALSE);
@@ -372,20 +370,41 @@ bool LLAppViewerWin32::initHardwareTest()
372 LLSplashScreen::update(splash_msg.str().c_str()); 370 LLSplashScreen::update(splash_msg.str().c_str());
373 } 371 }
374 372
375 if (!LLWinDebug::setupExceptionHandler()) 373 if (!LLWinDebug::checkExceptionHandler())
376 { 374 {
377 llwarns << " Someone took over my exception handler (post hardware probe)!" << llendl; 375 LL_WARNS("AppInit") << " Someone took over my exception handler (post hardware probe)!" << LL_ENDL;
378 } 376 }
379 377
380 gGLManager.mVRAM = gDXHardware.getVRAM(); 378 gGLManager.mVRAM = gDXHardware.getVRAM();
381 llinfos << "Detected VRAM: " << gGLManager.mVRAM << llendl; 379 LL_INFOS("AppInit") << "Detected VRAM: " << gGLManager.mVRAM << LL_ENDL;
382 380
383 return true; 381 return true;
384} 382}
385 383
386bool LLAppViewerWin32::initParseCommandLine(LLCommandLineParser& clp) 384bool LLAppViewerWin32::initParseCommandLine(LLCommandLineParser& clp)
387{ 385{
388 return clp.parseCommandLineString(mCmdLine); 386 if (!clp.parseCommandLineString(mCmdLine))
387 {
388 return false;
389 }
390
391 // Find the system language.
392 FL_Locale *locale = NULL;
393 FL_Success success = FL_FindLocale(&locale, FL_MESSAGES);
394 if (success != 0)
395 {
396 if (success >= 2 && locale->lang) // confident!
397 {
398 LLControlVariable* c = gSavedSettings.getControl("SystemLanguage");
399 if(c)
400 {
401 c->setValue(std::string(locale->lang), false);
402 }
403 }
404 FL_FreeLocale(&locale);
405 }
406
407 return true;
389} 408}
390 409
391void LLAppViewerWin32::handleSyncCrashTrace() 410void LLAppViewerWin32::handleSyncCrashTrace()
@@ -401,7 +420,7 @@ void LLAppViewerWin32::handleCrashReporting()
401 exe_path += "win_crash_logger.exe"; 420 exe_path += "win_crash_logger.exe";
402 421
403 std::string arg_string = "-user "; 422 std::string arg_string = "-user ";
404 arg_string += gGridName; 423 arg_string += LLViewerLogin::getInstance()->getGridLabel();
405 424
406 switch(getCrashBehavior()) 425 switch(getCrashBehavior())
407 { 426 {
diff --git a/linden/indra/newview/llbox.cpp b/linden/indra/newview/llbox.cpp
index 984d15b..1e6d282 100644
--- a/linden/indra/newview/llbox.cpp
+++ b/linden/indra/newview/llbox.cpp
@@ -34,7 +34,7 @@
34#include "llbox.h" 34#include "llbox.h"
35 35
36#include "llgl.h" 36#include "llgl.h"
37#include "llglimmediate.h" 37#include "llrender.h"
38#include "llglheaders.h" 38#include "llglheaders.h"
39 39
40LLBox gBox; 40LLBox gBox;
diff --git a/linden/indra/newview/llchatbar.cpp b/linden/indra/newview/llchatbar.cpp
index d1834a6..bbbdb93 100644
--- a/linden/indra/newview/llchatbar.cpp
+++ b/linden/indra/newview/llchatbar.cpp
@@ -144,6 +144,7 @@ BOOL LLChatBar::postBuild()
144 mInputEditor->setRevertOnEsc( FALSE ); 144 mInputEditor->setRevertOnEsc( FALSE );
145 mInputEditor->setIgnoreTab(TRUE); 145 mInputEditor->setIgnoreTab(TRUE);
146 mInputEditor->setPassDelete(TRUE); 146 mInputEditor->setPassDelete(TRUE);
147 mInputEditor->setReplaceNewlinesWithSpaces(FALSE);
147 148
148 mInputEditor->setMaxTextLength(1023); 149 mInputEditor->setMaxTextLength(1023);
149 mInputEditor->setEnableLineHistory(TRUE); 150 mInputEditor->setEnableLineHistory(TRUE);
diff --git a/linden/indra/newview/llcolorswatch.cpp b/linden/indra/newview/llcolorswatch.cpp
index 3f18d39..64db86c 100644
--- a/linden/indra/newview/llcolorswatch.cpp
+++ b/linden/indra/newview/llcolorswatch.cpp
@@ -39,7 +39,7 @@
39 39
40// Project includes 40// Project includes
41#include "llui.h" 41#include "llui.h"
42#include "llglimmediate.h" 42#include "llrender.h"
43#include "lluiconstants.h" 43#include "lluiconstants.h"
44#include "llviewerwindow.h" 44#include "llviewerwindow.h"
45#include "llviewercontrol.h" 45#include "llviewercontrol.h"
diff --git a/linden/indra/newview/llcommandlineparser.cpp b/linden/indra/newview/llcommandlineparser.cpp
index 8123632..45f33dc 100644
--- a/linden/indra/newview/llcommandlineparser.cpp
+++ b/linden/indra/newview/llcommandlineparser.cpp
@@ -291,12 +291,15 @@ bool LLCommandLineParser::parseAndStoreResults(po::command_line_parser& clp)
291 } 291 }
292 catch(LLCLPLastOption&) 292 catch(LLCLPLastOption&)
293 { 293 {
294 // Continue without parsing. 294 // This exception means a token was read after an option
295 std::string msg = "Found tokens past last option. Ignoring."; 295 // that must be the last option was reached (see url and slurl options)
296 llwarns << msg << llendl; 296
297 mErrorMsg = msg; 297 // boost::po will have stored a malformed option.
298 // boost::po will have stored a mal-formed option.
299 // All such options will be removed below. 298 // All such options will be removed below.
299 // The last option read, the last_option option, and its value
300 // are put into the error message.
301 std::string last_option;
302 std::string last_value;
300 for(po::variables_map::iterator i = gVariableMap.begin(); i != gVariableMap.end();) 303 for(po::variables_map::iterator i = gVariableMap.begin(); i != gVariableMap.end();)
301 { 304 {
302 po::variables_map::iterator tempI = i++; 305 po::variables_map::iterator tempI = i++;
@@ -304,7 +307,27 @@ bool LLCommandLineParser::parseAndStoreResults(po::command_line_parser& clp)
304 { 307 {
305 gVariableMap.erase(tempI); 308 gVariableMap.erase(tempI);
306 } 309 }
310 else
311 {
312 last_option = tempI->first;
313 LLCommandLineParser::token_vector_t* tv =
314 boost::any_cast<LLCommandLineParser::token_vector_t>(&(tempI->second.value()));
315 if(!tv->empty())
316 {
317 last_value = (*tv)[tv->size()-1];
318 }
319 }
307 } 320 }
321
322 // Continue without parsing.
323 std::ostringstream msg;
324 msg << "Caught Error: Found options after last option: "
325 << last_option << " "
326 << last_value;
327
328 llwarns << msg.str() << llendl;
329 mErrorMsg = msg.str();
330 return false;
308 } 331 }
309 return true; 332 return true;
310} 333}
diff --git a/linden/indra/newview/llcompilequeue.cpp b/linden/indra/newview/llcompilequeue.cpp
index aeaa189..45d8e1c 100644
--- a/linden/indra/newview/llcompilequeue.cpp
+++ b/linden/indra/newview/llcompilequeue.cpp
@@ -386,7 +386,7 @@ void LLFloaterCompileQueue::scriptArrived(LLVFS *vfs, const LLUUID& asset_id,
386 asset_id.toString(uuid_str); 386 asset_id.toString(uuid_str);
387 snprintf(filename, sizeof(filename), "%s.%s",gDirUtilp->getExpandedFilename(LL_PATH_CACHE,uuid_str).c_str(),LLAssetType::lookup(type)); /* Flawfinder: ignore */ 387 snprintf(filename, sizeof(filename), "%s.%s",gDirUtilp->getExpandedFilename(LL_PATH_CACHE,uuid_str).c_str(),LLAssetType::lookup(type)); /* Flawfinder: ignore */
388 388
389 FILE *fp = LLFile::fopen(filename, "wb"); /*Flawfinder: ignore*/ 389 LLFILE *fp = LLFile::fopen(filename, "wb"); /*Flawfinder: ignore*/
390 if (fp) 390 if (fp)
391 { 391 {
392 const S32 buf_size = 65536; 392 const S32 buf_size = 65536;
diff --git a/linden/indra/newview/llconsole.cpp b/linden/indra/newview/llconsole.cpp
index 517e06f..08ef124 100644
--- a/linden/indra/newview/llconsole.cpp
+++ b/linden/indra/newview/llconsole.cpp
@@ -262,34 +262,38 @@ void LLConsole::addQueuedLines()
262 if (!wline.empty() && mFont != NULL) 262 if (!wline.empty() && mFont != NULL)
263 { 263 {
264 // Wrap lines that are longer than the view is wide. 264 // Wrap lines that are longer than the view is wide.
265 S32 offset = 0; 265 S32 line_start_offset = 0;
266 while( offset < (S32)wline.length() ) 266 while( line_start_offset < (S32)wline.length() )
267 { 267 {
268 S32 skip_chars; // skip '\n' 268 // Find the next '\n', if any
269 // Figure out if a word-wrapped line fits here. 269 LLWString::size_type line_end = wline.find_first_of(llwchar('\n'), line_start_offset);
270 LLWString::size_type line_end = wline.find_first_of(llwchar('\n'), offset); 270 if (LLWString::npos == line_end)
271 if (line_end != LLWString::npos)
272 {
273 skip_chars = 1; // skip '\n'
274 }
275 else
276 { 271 {
272 // no more '\n's, try to use the whole line
277 line_end = wline.size(); 273 line_end = wline.size();
278 skip_chars = 0;
279 } 274 }
280 U32 drawable = mFont->maxDrawableChars(wline.c_str()+offset, (F32)getRect().getWidth(), line_end-offset, TRUE); 275 // Find how many characters will reasonably fit in the allowed width
276 U32 drawable = mFont->maxDrawableChars(wline.c_str()+line_start_offset, (F32)getRect().getWidth(), line_end-line_start_offset, TRUE);
281 if (drawable != 0) 277 if (drawable != 0)
282 { 278 {
283 LLFixedBuffer::addLine(wline.substr(offset, drawable)); 279 LLFixedBuffer::addLine(wline.substr(line_start_offset, drawable));
284 mAddTimes[mAddTimes.size()-1] = line_info.add_time; 280 mAddTimes[mAddTimes.size()-1] = line_info.add_time;
281
282 // move the line_start_offset by the number of characters we were able to draw, up to an implicit or explicit line-break.
283 line_start_offset += drawable;
285 } 284 }
286 else 285 else
287 { 286 {
288 // force a blank line 287 // no drawable characters - force a blank line and try the next character.
289 LLFixedBuffer::addLine(" "); 288 LLFixedBuffer::addLine(" ");
289 line_start_offset++;
290 } 290 }
291 mColors.push_back(color); 291 mColors.push_back(color);
292 offset += (drawable + skip_chars); 292 // if this was an *explicit* line-break or the end of the text, then increment the offset for the start of the next line (if any).
293 if (line_start_offset == line_end)
294 {
295 line_start_offset++;
296 }
293 } 297 }
294 } 298 }
295 } 299 }
diff --git a/linden/indra/newview/llcubemap.cpp b/linden/indra/newview/llcubemap.cpp
index 31937ba..f79fd0f 100644
--- a/linden/indra/newview/llcubemap.cpp
+++ b/linden/indra/newview/llcubemap.cpp
@@ -38,6 +38,8 @@
38#include "v4coloru.h" 38#include "v4coloru.h"
39#include "v3math.h" 39#include "v3math.h"
40 40
41#include "llrender.h"
42
41#include "llviewercamera.h" 43#include "llviewercamera.h"
42#include "llviewerimage.h" 44#include "llviewerimage.h"
43#include "llviewerimagelist.h" 45#include "llviewerimagelist.h"
@@ -95,9 +97,7 @@ void LLCubeMap::initGL()
95 mImages[i]->createGLTexture(0, mRawImages[i], texname); 97 mImages[i]->createGLTexture(0, mRawImages[i], texname);
96 98
97 glBindTexture(GL_TEXTURE_CUBE_MAP_ARB, texname); 99 glBindTexture(GL_TEXTURE_CUBE_MAP_ARB, texname);
98 glTexParameteri(GL_TEXTURE_CUBE_MAP_ARB, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); 100 mImages[i]->setClampCubemap (TRUE, TRUE, TRUE);
99 glTexParameteri(GL_TEXTURE_CUBE_MAP_ARB, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
100 glTexParameteri(GL_TEXTURE_CUBE_MAP_ARB, GL_TEXTURE_WRAP_R, GL_CLAMP_TO_EDGE);
101 stop_glerror(); 101 stop_glerror();
102 } 102 }
103 } 103 }
@@ -187,16 +187,15 @@ void LLCubeMap::bind()
187 // We assume that if they have cube mapping, they have multitexturing. 187 // We assume that if they have cube mapping, they have multitexturing.
188 if (mTextureStage > 0) 188 if (mTextureStage > 0)
189 { 189 {
190 glActiveTextureARB(GL_TEXTURE0_ARB + mTextureStage); 190 gGL.getTexUnit(mTextureStage)->activate();
191 } 191 }
192 glEnable(GL_TEXTURE_CUBE_MAP_ARB); 192 glEnable(GL_TEXTURE_CUBE_MAP_ARB);
193 glBindTexture(GL_TEXTURE_CUBE_MAP_ARB, mImages[0]->getTexName()); 193 glBindTexture(GL_TEXTURE_CUBE_MAP_ARB, mImages[0]->getTexName());
194 194
195 glTexParameteri(GL_TEXTURE_CUBE_MAP_ARB, GL_TEXTURE_MAG_FILTER, GL_LINEAR); 195 mImages[0]->setMipFilterNearest (FALSE, FALSE);
196 glTexParameteri(GL_TEXTURE_CUBE_MAP_ARB, GL_TEXTURE_MIN_FILTER, (use_cube_mipmaps? GL_LINEAR_MIPMAP_LINEAR : GL_LINEAR));
197 if (mTextureStage > 0) 196 if (mTextureStage > 0)
198 { 197 {
199 glActiveTextureARB(GL_TEXTURE0_ARB); 198 gGL.getTexUnit(0)->activate();
200 } 199 }
201 } 200 }
202 else 201 else
@@ -221,14 +220,14 @@ void LLCubeMap::enableTexture(S32 stage)
221 { 220 {
222 if (stage > 0) 221 if (stage > 0)
223 { 222 {
224 glActiveTextureARB(GL_TEXTURE0_ARB + stage); 223 gGL.getTexUnit(stage)->activate();
225 } 224 }
226 225
227 glEnable(GL_TEXTURE_CUBE_MAP_ARB); 226 glEnable(GL_TEXTURE_CUBE_MAP_ARB);
228 227
229 if (stage > 0) 228 if (stage > 0)
230 { 229 {
231 glActiveTextureARB(GL_TEXTURE0_ARB); 230 gGL.getTexUnit(0)->activate();
232 } 231 }
233 } 232 }
234} 233}
@@ -240,7 +239,7 @@ void LLCubeMap::enableTextureCoords(S32 stage)
240 { 239 {
241 if (stage > 0) 240 if (stage > 0)
242 { 241 {
243 glActiveTextureARB(GL_TEXTURE0_ARB + stage); 242 gGL.getTexUnit(stage)->activate();
244 } 243 }
245 244
246 glEnable(GL_TEXTURE_GEN_R); 245 glEnable(GL_TEXTURE_GEN_R);
@@ -253,7 +252,7 @@ void LLCubeMap::enableTextureCoords(S32 stage)
253 252
254 if (stage > 0) 253 if (stage > 0)
255 { 254 {
256 glActiveTextureARB(GL_TEXTURE0_ARB); 255 gGL.getTexUnit(0)->activate();
257 } 256 }
258 } 257 }
259} 258}
@@ -272,13 +271,13 @@ void LLCubeMap::disableTexture(void)
272 { 271 {
273 if (mTextureStage > 0) 272 if (mTextureStage > 0)
274 { 273 {
275 glActiveTextureARB(GL_TEXTURE0_ARB + mTextureStage); 274 gGL.getTexUnit(mTextureStage)->activate();
276 } 275 }
277 glBindTexture(GL_TEXTURE_CUBE_MAP_ARB, 0); 276 glBindTexture(GL_TEXTURE_CUBE_MAP_ARB, 0);
278 glDisable(GL_TEXTURE_CUBE_MAP_ARB); 277 glDisable(GL_TEXTURE_CUBE_MAP_ARB);
279 if (mTextureStage > 0) 278 if (mTextureStage > 0)
280 { 279 {
281 glActiveTextureARB(GL_TEXTURE0_ARB); 280 gGL.getTexUnit(0)->activate();
282 } 281 }
283 } 282 }
284} 283}
@@ -289,14 +288,14 @@ void LLCubeMap::disableTextureCoords(void)
289 { 288 {
290 if (mTextureCoordStage > 0) 289 if (mTextureCoordStage > 0)
291 { 290 {
292 glActiveTextureARB(GL_TEXTURE0_ARB + mTextureCoordStage); 291 gGL.getTexUnit(mTextureCoordStage)->activate();
293 } 292 }
294 glDisable(GL_TEXTURE_GEN_S); 293 glDisable(GL_TEXTURE_GEN_S);
295 glDisable(GL_TEXTURE_GEN_T); 294 glDisable(GL_TEXTURE_GEN_T);
296 glDisable(GL_TEXTURE_GEN_R); 295 glDisable(GL_TEXTURE_GEN_R);
297 if (mTextureCoordStage > 0) 296 if (mTextureCoordStage > 0)
298 { 297 {
299 glActiveTextureARB(GL_TEXTURE0_ARB); 298 gGL.getTexUnit(0)->activate();
300 } 299 }
301 } 300 }
302} 301}
@@ -307,7 +306,7 @@ void LLCubeMap::setMatrix(S32 stage)
307 306
308 if (stage > 0) 307 if (stage > 0)
309 { 308 {
310 glActiveTextureARB(GL_TEXTURE0_ARB+stage); 309 gGL.getTexUnit(stage)->activate();
311 } 310 }
312 311
313 LLVector3 x(LLVector3d(gGLModelView+0)); 312 LLVector3 x(LLVector3d(gGLModelView+0));
@@ -326,7 +325,7 @@ void LLCubeMap::setMatrix(S32 stage)
326 325
327 if (stage > 0) 326 if (stage > 0)
328 { 327 {
329 glActiveTextureARB(GL_TEXTURE0_ARB); 328 gGL.getTexUnit(0)->activate();
330 } 329 }
331} 330}
332 331
@@ -334,7 +333,7 @@ void LLCubeMap::restoreMatrix()
334{ 333{
335 if (mMatrixStage > 0) 334 if (mMatrixStage > 0)
336 { 335 {
337 glActiveTextureARB(GL_TEXTURE0_ARB+mMatrixStage); 336 gGL.getTexUnit(mMatrixStage)->activate();
338 } 337 }
339 glMatrixMode(GL_TEXTURE); 338 glMatrixMode(GL_TEXTURE);
340 glPopMatrix(); 339 glPopMatrix();
@@ -342,10 +341,17 @@ void LLCubeMap::restoreMatrix()
342 341
343 if (mMatrixStage > 0) 342 if (mMatrixStage > 0)
344 { 343 {
345 glActiveTextureARB(GL_TEXTURE0_ARB); 344 gGL.getTexUnit(0)->activate();
346 } 345 }
347} 346}
348 347
348void LLCubeMap::setReflection (void)
349{
350 glBindTexture (GL_TEXTURE_CUBE_MAP_ARB, getGLName());
351 mImages[0]->setMipFilterNearest (FALSE, FALSE);
352 mImages[0]->setClampCubemap (TRUE, TRUE);
353}
354
349LLVector3 LLCubeMap::map(U8 side, U16 v_val, U16 h_val) const 355LLVector3 LLCubeMap::map(U8 side, U16 v_val, U16 h_val) const
350{ 356{
351 LLVector3 dir; 357 LLVector3 dir;
diff --git a/linden/indra/newview/llcubemap.h b/linden/indra/newview/llcubemap.h
index a4d9106..0b8cf29 100644
--- a/linden/indra/newview/llcubemap.h
+++ b/linden/indra/newview/llcubemap.h
@@ -60,6 +60,7 @@ public:
60 void disableTextureCoords(void); 60 void disableTextureCoords(void);
61 void setMatrix(S32 stage); 61 void setMatrix(S32 stage);
62 void restoreMatrix(); 62 void restoreMatrix();
63 void setReflection (void);
63 64
64 void finishPaint(); 65 void finishPaint();
65 66
diff --git a/linden/indra/newview/llcurrencyuimanager.cpp b/linden/indra/newview/llcurrencyuimanager.cpp
index 8964054..74f6c71 100644
--- a/linden/indra/newview/llcurrencyuimanager.cpp
+++ b/linden/indra/newview/llcurrencyuimanager.cpp
@@ -44,7 +44,7 @@
44#include "lllineeditor.h" 44#include "lllineeditor.h"
45#include "llviewchildren.h" 45#include "llviewchildren.h"
46#include "llxmlrpctransaction.h" 46#include "llxmlrpctransaction.h"
47#include "llappviewer.h" 47#include "llviewernetwork.h"
48 48
49 49
50const F64 CURRENCY_ESTIMATE_FREQUENCY = 2.0; 50const F64 CURRENCY_ESTIMATE_FREQUENCY = 2.0;
@@ -238,7 +238,7 @@ void LLCurrencyUIManager::Impl::startTransaction(TransactionType type,
238 static std::string transactionURI; 238 static std::string transactionURI;
239 if (transactionURI.empty()) 239 if (transactionURI.empty())
240 { 240 {
241 transactionURI = LLAppViewer::instance()->getHelperURI() + "currency.php"; 241 transactionURI = LLViewerLogin::getInstance()->getHelperURI() + "currency.php";
242 } 242 }
243 243
244 delete mTransaction; 244 delete mTransaction;
@@ -526,3 +526,4 @@ std::string LLCurrencyUIManager::errorURI()
526} 526}
527 527
528 528
529
diff --git a/linden/indra/newview/lldrawable.cpp b/linden/indra/newview/lldrawable.cpp
index d2b2a99..ba7d6b9 100644
--- a/linden/indra/newview/lldrawable.cpp
+++ b/linden/indra/newview/lldrawable.cpp
@@ -418,7 +418,7 @@ void LLDrawable::makeStatic(BOOL warning_enabled)
418 418
419 if (mParent.notNull() && mParent->isActive() && warning_enabled) 419 if (mParent.notNull() && mParent->isActive() && warning_enabled)
420 { 420 {
421 llwarns << "Drawable becamse static with active parent!" << llendl; 421 LL_WARNS_ONCE("Drawable") << "Drawable becomes static with active parent!" << LL_ENDL;
422 } 422 }
423 423
424 S32 child_count = mVObjp->mChildList.size(); 424 S32 child_count = mVObjp->mChildList.size();
@@ -1170,11 +1170,13 @@ void LLSpatialBridge::setVisible(LLCamera& camera_in, std::vector<LLDrawable*>*
1170 LLSpatialGroup* group = av->getSpatialGroup(); 1170 LLSpatialGroup* group = av->getSpatialGroup();
1171 1171
1172 BOOL impostor = objparent->isAvatar() && ((LLVOAvatar*) objparent)->isImpostor(); 1172 BOOL impostor = objparent->isAvatar() && ((LLVOAvatar*) objparent)->isImpostor();
1173 1173 BOOL loaded = objparent->isAvatar() && ((LLVOAvatar*) objparent)->isFullyLoaded();
1174
1174 if (!group || 1175 if (!group ||
1175 av->getSpatialGroup()->mDistance > LLVOAvatar::sRenderDistance || 1176 av->getSpatialGroup()->mDistance > LLVOAvatar::sRenderDistance ||
1176 LLDrawable::getCurrentFrame() - av->mVisible > 1 || 1177 LLDrawable::getCurrentFrame() - av->mVisible > 1 ||
1177 impostor) 1178 impostor ||
1179 !loaded)
1178 { 1180 {
1179 return; 1181 return;
1180 } 1182 }
diff --git a/linden/indra/newview/lldrawpool.cpp b/linden/indra/newview/lldrawpool.cpp
index c579c68..9d8bd0a 100644
--- a/linden/indra/newview/lldrawpool.cpp
+++ b/linden/indra/newview/lldrawpool.cpp
@@ -32,7 +32,7 @@
32#include "llviewerprecompiledheaders.h" 32#include "llviewerprecompiledheaders.h"
33 33
34#include "lldrawpool.h" 34#include "lldrawpool.h"
35#include "llglimmediate.h" 35#include "llrender.h"
36#include "llfasttimer.h" 36#include "llfasttimer.h"
37#include "llviewercontrol.h" 37#include "llviewercontrol.h"
38 38
diff --git a/linden/indra/newview/lldrawpoolalpha.cpp b/linden/indra/newview/lldrawpoolalpha.cpp
index 95f8502..ca8f3b4 100644
--- a/linden/indra/newview/lldrawpoolalpha.cpp
+++ b/linden/indra/newview/lldrawpoolalpha.cpp
@@ -37,6 +37,7 @@
37#include "llviewercontrol.h" 37#include "llviewercontrol.h"
38#include "llcriticaldamp.h" 38#include "llcriticaldamp.h"
39#include "llfasttimer.h" 39#include "llfasttimer.h"
40#include "llrender.h"
40 41
41#include "llcubemap.h" 42#include "llcubemap.h"
42#include "llsky.h" 43#include "llsky.h"
@@ -93,7 +94,7 @@ void LLDrawPoolAlpha::beginRenderPass(S32 pass)
93 { 94 {
94 // Start out with no shaders. 95 // Start out with no shaders.
95 current_shader = target_shader = NULL; 96 current_shader = target_shader = NULL;
96 glUseProgramObjectARB(0); 97 LLGLSLShader::bindNoShader();
97 } 98 }
98 gPipeline.enableLightsDynamic(); 99 gPipeline.enableLightsDynamic();
99} 100}
@@ -105,7 +106,7 @@ void LLDrawPoolAlpha::endRenderPass( S32 pass )
105 106
106 if(gPipeline.canUseWindLightShaders()) 107 if(gPipeline.canUseWindLightShaders())
107 { 108 {
108 glUseProgramObjectARB(0); 109 LLGLSLShader::bindNoShader();
109 } 110 }
110} 111}
111 112
@@ -123,7 +124,7 @@ void LLDrawPoolAlpha::render(S32 pass)
123 { 124 {
124 if(gPipeline.canUseWindLightShaders()) 125 if(gPipeline.canUseWindLightShaders())
125 { 126 {
126 glUseProgramObjectARB(0); 127 LLGLSLShader::bindNoShader();
127 } 128 }
128 gPipeline.enableLightsFullbright(LLColor4(1,1,1,1)); 129 gPipeline.enableLightsFullbright(LLColor4(1,1,1,1));
129 glColor4f(1,0,0,1); 130 glColor4f(1,0,0,1);
@@ -207,18 +208,17 @@ void LLDrawPoolAlpha::renderGroupAlpha(LLSpatialGroup* group, U32 type, U32 mask
207 { 208 {
208 return; 209 return;
209 } 210 }
210 // *TODO - Uhhh, we should always be doing some type of alpha rejection. These should probably both be 0.01f 211 gGL.setAlphaRejectSettings(LLRender::CF_DEFAULT);
211 glAlphaFunc(GL_GREATER, 0.f);
212 } 212 }
213 else 213 else
214 { 214 {
215 if (LLPipeline::sImpostorRender) 215 if (LLPipeline::sImpostorRender)
216 { 216 {
217 glAlphaFunc(GL_GREATER, 0.5f); 217 gGL.setAlphaRejectSettings(LLRender::CF_GREATER, 0.5f);
218 } 218 }
219 else 219 else
220 { 220 {
221 glAlphaFunc(GL_GREATER, 0.01f); 221 gGL.setAlphaRejectSettings(LLRender::CF_DEFAULT);
222 } 222 }
223 } 223 }
224 224
@@ -230,7 +230,7 @@ void LLDrawPoolAlpha::renderGroupAlpha(LLSpatialGroup* group, U32 type, U32 mask
230 230
231 if (texture && params.mTexture.notNull()) 231 if (texture && params.mTexture.notNull())
232 { 232 {
233 glActiveTextureARB(GL_TEXTURE0_ARB); 233 gGL.getTexUnit(0)->activate();
234 params.mTexture->bind(); 234 params.mTexture->bind();
235 params.mTexture->addTextureStats(params.mVSize); 235 params.mTexture->addTextureStats(params.mVSize);
236 if (params.mTextureMatrix) 236 if (params.mTextureMatrix)
@@ -283,7 +283,7 @@ void LLDrawPoolAlpha::renderGroupAlpha(LLSpatialGroup* group, U32 type, U32 mask
283 } 283 }
284 else if (!use_shaders && current_shader != NULL) 284 else if (!use_shaders && current_shader != NULL)
285 { 285 {
286 glUseProgramObjectARB(0); 286 LLGLSLShader::bindNoShader();
287 current_shader = NULL; 287 current_shader = NULL;
288 } 288 }
289 289
diff --git a/linden/indra/newview/lldrawpoolalpha.h b/linden/indra/newview/lldrawpoolalpha.h
index 4318045..b717398 100644
--- a/linden/indra/newview/lldrawpoolalpha.h
+++ b/linden/indra/newview/lldrawpoolalpha.h
@@ -68,13 +68,10 @@ public:
68 static BOOL sShowDebugAlpha; 68 static BOOL sShowDebugAlpha;
69 69
70private: 70private:
71 S32 mDiffuse;
72 LLGLSLShader* current_shader; 71 LLGLSLShader* current_shader;
73 LLGLSLShader* target_shader; 72 LLGLSLShader* target_shader;
74 LLGLSLShader* simple_shader; 73 LLGLSLShader* simple_shader;
75 LLGLSLShader* simple_lod_shader;
76 LLGLSLShader* fullbright_shader; 74 LLGLSLShader* fullbright_shader;
77 LLGLSLShader* fullbright_lod_shader;
78}; 75};
79 76
80class LLDrawPoolAlphaPostWater : public LLDrawPoolAlpha 77class LLDrawPoolAlphaPostWater : public LLDrawPoolAlpha
diff --git a/linden/indra/newview/lldrawpoolavatar.cpp b/linden/indra/newview/lldrawpoolavatar.cpp
index 6cfd131..fe5d4cd 100644
--- a/linden/indra/newview/lldrawpoolavatar.cpp
+++ b/linden/indra/newview/lldrawpoolavatar.cpp
@@ -32,7 +32,7 @@
32#include "llviewerprecompiledheaders.h" 32#include "llviewerprecompiledheaders.h"
33 33
34#include "lldrawpoolavatar.h" 34#include "lldrawpoolavatar.h"
35#include "llglimmediate.h" 35#include "llrender.h"
36 36
37#include "llvoavatar.h" 37#include "llvoavatar.h"
38#include "m3math.h" 38#include "m3math.h"
@@ -299,7 +299,7 @@ void LLDrawPoolAvatar::beginSkinned()
299 } 299 }
300 300
301 sVertexProgram->enableTexture(LLShaderMgr::BUMP_MAP); 301 sVertexProgram->enableTexture(LLShaderMgr::BUMP_MAP);
302 glActiveTextureARB(GL_TEXTURE0_ARB); 302 gGL.getTexUnit(0)->activate();
303 } 303 }
304 else 304 else
305 { 305 {
@@ -319,7 +319,7 @@ void LLDrawPoolAvatar::endSkinned()
319 { 319 {
320 sRenderingSkinned = FALSE; 320 sRenderingSkinned = FALSE;
321 sVertexProgram->disableTexture(LLShaderMgr::BUMP_MAP); 321 sVertexProgram->disableTexture(LLShaderMgr::BUMP_MAP);
322 glActiveTextureARB(GL_TEXTURE0_ARB); 322 gGL.getTexUnit(0)->activate();
323 disable_vertex_weighting(sVertexProgram->mAttribute[LLShaderMgr::AVATAR_WEIGHT]); 323 disable_vertex_weighting(sVertexProgram->mAttribute[LLShaderMgr::AVATAR_WEIGHT]);
324 if (sShaderLevel >= SHADER_LEVEL_BUMP) 324 if (sShaderLevel >= SHADER_LEVEL_BUMP)
325 { 325 {
@@ -343,7 +343,7 @@ void LLDrawPoolAvatar::endSkinned()
343 } 343 }
344 } 344 }
345 345
346 glActiveTextureARB(GL_TEXTURE0_ARB); 346 gGL.getTexUnit(0)->activate();
347} 347}
348 348
349 349
@@ -395,6 +395,31 @@ void LLDrawPoolAvatar::renderAvatars(LLVOAvatar* single_avatar, S32 pass)
395 return; 395 return;
396 } 396 }
397 397
398 if (!single_avatar && !avatarp->isFullyLoaded())
399 {
400
401 /* // debug code to draw a cube in place of avatar
402 LLGLSNoTexture gls_no_texture;
403 LLVector3 pos = avatarp->getPositionAgent();
404
405 gGL.color4f(1.0f, 0.0f, 0.0f, 0.8f);
406 gGL.begin(GL_LINES);
407 {
408 gGL.vertex3fv((pos - LLVector3(0.2f, 0.f, 0.f)).mV);
409 gGL.vertex3fv((pos + LLVector3(0.2f, 0.f, 0.f)).mV);
410 gGL.vertex3fv((pos - LLVector3(0.f, 0.2f, 0.f)).mV);
411 gGL.vertex3fv((pos + LLVector3(0.f, 0.2f, 0.f)).mV);
412 gGL.vertex3fv((pos - LLVector3(0.f, 0.f, 0.2f)).mV);
413 gGL.vertex3fv((pos + LLVector3(0.f, 0.f, 0.2f)).mV);
414 }
415 gGL.end();
416 */
417
418
419 // don't render please
420 return;
421 }
422
398 BOOL impostor = avatarp->isImpostor() && !single_avatar; 423 BOOL impostor = avatarp->isImpostor() && !single_avatar;
399 424
400 if (impostor && pass != 0) 425 if (impostor && pass != 0)
@@ -574,22 +599,12 @@ void LLDrawPoolAvatar::renderForSelect()
574 BOOL impostor = avatarp->isImpostor(); 599 BOOL impostor = avatarp->isImpostor();
575 if (impostor) 600 if (impostor)
576 { 601 {
577 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB); 602 gGL.getTexUnit(0)->setTextureColorBlend(LLTexUnit::TBO_REPLACE, LLTexUnit::TBS_VERT_COLOR);
578 glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_REPLACE); 603 gGL.getTexUnit(0)->setTextureAlphaBlend(LLTexUnit::TBO_MULT, LLTexUnit::TBS_TEX_ALPHA, LLTexUnit::TBS_VERT_ALPHA);
579 glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA_ARB, GL_MODULATE);
580
581 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB, GL_PRIMARY_COLOR);
582 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB_ARB, GL_SRC_COLOR);
583
584 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA_ARB, GL_TEXTURE);
585 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_ALPHA_ARB, GL_SRC_ALPHA);
586
587 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_ALPHA_ARB, GL_PRIMARY_COLOR_ARB);
588 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_ALPHA_ARB, GL_SRC_ALPHA);
589 604
590 avatarp->renderImpostor(color); 605 avatarp->renderImpostor(color);
591 606
592 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); 607 gGL.getTexUnit(0)->setTextureBlendType(LLTexUnit::TB_MULT);
593 return; 608 return;
594 } 609 }
595 610
@@ -598,8 +613,8 @@ void LLDrawPoolAvatar::renderForSelect()
598 { 613 {
599 gAvatarMatrixParam = sVertexProgram->mUniform[LLShaderMgr::AVATAR_MATRIX]; 614 gAvatarMatrixParam = sVertexProgram->mUniform[LLShaderMgr::AVATAR_MATRIX];
600 } 615 }
601 glAlphaFunc(GL_GEQUAL, 0.2f); 616 gGL.setAlphaRejectSettings(LLRender::CF_GREATER_EQUAL, 0.2f);
602 gGL.blendFunc(GL_ONE, GL_ZERO); 617 gGL.setSceneBlendType(LLRender::BT_REPLACE);
603 618
604 glColor4ubv(color.mV); 619 glColor4ubv(color.mV);
605 620
@@ -620,11 +635,11 @@ void LLDrawPoolAvatar::renderForSelect()
620 disable_vertex_weighting(sVertexProgram->mAttribute[LLShaderMgr::AVATAR_WEIGHT]); 635 disable_vertex_weighting(sVertexProgram->mAttribute[LLShaderMgr::AVATAR_WEIGHT]);
621 } 636 }
622 637
623 glAlphaFunc(GL_GREATER, 0.01f); 638 gGL.setAlphaRejectSettings(LLRender::CF_DEFAULT);
624 gGL.blendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); 639 gGL.setSceneBlendType(LLRender::BT_ALPHA);
625 640
626 // restore texture mode 641 // restore texture mode
627 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); 642 gGL.getTexUnit(0)->setTextureBlendType(LLTexUnit::TB_MULT);
628} 643}
629 644
630//----------------------------------------------------------------------------- 645//-----------------------------------------------------------------------------
diff --git a/linden/indra/newview/lldrawpoolbump.cpp b/linden/indra/newview/lldrawpoolbump.cpp
index 7e8b9d6..303b8d5 100644
--- a/linden/indra/newview/lldrawpoolbump.cpp
+++ b/linden/indra/newview/lldrawpoolbump.cpp
@@ -41,7 +41,7 @@
41#include "m4math.h" 41#include "m4math.h"
42#include "v4math.h" 42#include "v4math.h"
43#include "llglheaders.h" 43#include "llglheaders.h"
44#include "llglimmediate.h" 44#include "llrender.h"
45 45
46#include "llagent.h" 46#include "llagent.h"
47#include "llcubemap.h" 47#include "llcubemap.h"
@@ -100,7 +100,7 @@ void LLStandardBumpmap::restoreGL()
100 gStandardBumpmapList[LLStandardBumpmap::sStandardBumpmapCount++] = LLStandardBumpmap("Darkness"); // BE_DARKNESS 100 gStandardBumpmapList[LLStandardBumpmap::sStandardBumpmapCount++] = LLStandardBumpmap("Darkness"); // BE_DARKNESS
101 101
102 std::string file_name = gDirUtilp->getExpandedFilename( LL_PATH_APP_SETTINGS, "std_bump.ini" ); 102 std::string file_name = gDirUtilp->getExpandedFilename( LL_PATH_APP_SETTINGS, "std_bump.ini" );
103 FILE* file = LLFile::fopen( file_name.c_str(), "rt" ); /*Flawfinder: ignore*/ 103 LLFILE* file = LLFile::fopen( file_name.c_str(), "rt" ); /*Flawfinder: ignore*/
104 if( !file ) 104 if( !file )
105 { 105 {
106 llwarns << "Could not open std_bump <" << file_name << ">" << llendl; 106 llwarns << "Could not open std_bump <" << file_name << ">" << llendl;
@@ -371,17 +371,8 @@ void LLDrawPoolBump::beginShiny(bool invisible)
371 cube_map->setMatrix(0); 371 cube_map->setMatrix(0);
372 cube_map->bind(); 372 cube_map->bind();
373 373
374 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB); 374 gGL.getTexUnit(0)->setTextureColorBlend(LLTexUnit::TBO_REPLACE, LLTexUnit::TBS_TEX_COLOR);
375 375 gGL.getTexUnit(0)->setTextureAlphaBlend(LLTexUnit::TBO_REPLACE, LLTexUnit::TBS_VERT_ALPHA);
376 //use RGB from texture
377 glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_REPLACE);
378 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB, GL_TEXTURE);
379 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB_ARB, GL_SRC_COLOR);
380
381 // use alpha from color
382 glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA_ARB, GL_REPLACE);
383 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA_ARB, GL_PRIMARY_COLOR);
384 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_ALPHA_ARB, GL_SRC_ALPHA);
385 } 376 }
386 } 377 }
387} 378}
@@ -443,15 +434,17 @@ void LLDrawPoolBump::endShiny(bool invisible)
443 } 434 }
444 435
445 shader->unbind(); 436 shader->unbind();
446 glActiveTextureARB(GL_TEXTURE0_ARB); 437 gGL.getTexUnit(0)->activate();
447 glEnable(GL_TEXTURE_2D); 438 glEnable(GL_TEXTURE_2D);
448 } 439 }
449 440 if (cube_channel >= 0)
450 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); 441 {
442 gGL.getTexUnit(cube_channel)->setTextureBlendType(LLTexUnit::TB_MULT);
443 }
451 } 444 }
452 445
453 LLImageGL::unbindTexture(0, GL_TEXTURE_2D); 446 LLImageGL::unbindTexture(0, GL_TEXTURE_2D);
454 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); 447 gGL.getTexUnit(0)->setTextureBlendType(LLTexUnit::TB_MULT);
455 448
456 diffuse_channel = -1; 449 diffuse_channel = -1;
457 cube_channel = 0; 450 cube_channel = 0;
@@ -540,16 +533,16 @@ void LLDrawPoolBump::endFullbrightShiny()
540 { 533 {
541 shader->disableTexture(LLShaderMgr::DIFFUSE_MAP); 534 shader->disableTexture(LLShaderMgr::DIFFUSE_MAP);
542 } 535 }
543 glActiveTextureARB(GL_TEXTURE0_ARB); 536 gGL.getTexUnit(0)->activate();
544 glEnable(GL_TEXTURE_2D); 537 glEnable(GL_TEXTURE_2D);
545 538
546 shader->unbind(); 539 shader->unbind();
547 540
548 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); 541 gGL.getTexUnit(0)->setTextureBlendType(LLTexUnit::TB_MULT);
549 } 542 }
550 543
551 LLImageGL::unbindTexture(0, GL_TEXTURE_2D); 544 LLImageGL::unbindTexture(0, GL_TEXTURE_2D);
552 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); 545 gGL.getTexUnit(0)->setTextureBlendType(LLTexUnit::TB_MULT);
553 546
554 diffuse_channel = -1; 547 diffuse_channel = -1;
555 cube_channel = 0; 548 cube_channel = 0;
@@ -650,37 +643,18 @@ void LLDrawPoolBump::beginBump()
650 643
651 // TEXTURE UNIT 0 644 // TEXTURE UNIT 0
652 // Output.rgb = texture at texture coord 0 645 // Output.rgb = texture at texture coord 0
653 glActiveTextureARB(GL_TEXTURE0_ARB); 646 gGL.getTexUnit(0)->activate();
654
655 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB);
656 glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_REPLACE);
657
658 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB, GL_TEXTURE);
659 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB_ARB, GL_SRC_ALPHA);
660 647
661 // Don't care about alpha output 648 gGL.getTexUnit(0)->setTextureColorBlend(LLTexUnit::TBO_REPLACE, LLTexUnit::TBS_TEX_ALPHA);
662 glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA_ARB, GL_REPLACE); 649 gGL.getTexUnit(0)->setTextureAlphaBlend(LLTexUnit::TBO_REPLACE, LLTexUnit::TBS_TEX_ALPHA);
663 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA_ARB, GL_TEXTURE);
664 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_ALPHA_ARB, GL_SRC_ALPHA);
665 650
666 // TEXTURE UNIT 1 651 // TEXTURE UNIT 1
667 glActiveTextureARB(GL_TEXTURE1_ARB); 652 gGL.getTexUnit(1)->activate();
668 653
669 glEnable(GL_TEXTURE_2D); // Texture unit 1 654 glEnable(GL_TEXTURE_2D); // Texture unit 1
670 655
671 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB); 656 gGL.getTexUnit(1)->setTextureColorBlend(LLTexUnit::TBO_ADD_SIGNED, LLTexUnit::TBS_PREV_COLOR, LLTexUnit::TBS_ONE_MINUS_TEX_ALPHA);
672 glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_ADD_SIGNED_ARB); 657 gGL.getTexUnit(1)->setTextureAlphaBlend(LLTexUnit::TBO_REPLACE, LLTexUnit::TBS_TEX_ALPHA);
673
674 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB, GL_PREVIOUS_ARB);
675 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB_ARB, GL_SRC_COLOR);
676
677 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_RGB_ARB, GL_TEXTURE);
678 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_RGB_ARB, GL_ONE_MINUS_SRC_ALPHA);
679
680 // Don't care about alpha output
681 glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA_ARB, GL_REPLACE);
682 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA_ARB, GL_TEXTURE);
683 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_ALPHA_ARB, GL_SRC_ALPHA);
684 658
685 // src = tex0 + (1 - tex1) - 0.5 659 // src = tex0 + (1 - tex1) - 0.5
686 // = (bump0/2 + 0.5) + (1 - (bump1/2 + 0.5)) - 0.5 660 // = (bump0/2 + 0.5) + (1 - (bump1/2 + 0.5)) - 0.5
@@ -692,9 +666,8 @@ void LLDrawPoolBump::beginBump()
692 // = 2 * ((1 + bump0 - bump1) / 2) * dst [0 - 2 * dst] 666 // = 2 * ((1 + bump0 - bump1) / 2) * dst [0 - 2 * dst]
693 // = (1 + bump0 - bump1) * dst.rgb 667 // = (1 + bump0 - bump1) * dst.rgb
694 // = dst.rgb + dst.rgb * (bump0 - bump1) 668 // = dst.rgb + dst.rgb * (bump0 - bump1)
695 gGL.blendFunc(GL_DST_COLOR, GL_SRC_COLOR); 669 gGL.setSceneBlendType(LLRender::BT_MULT_X2);
696// gGL.blendFunc(GL_ONE, GL_ZERO); // temp 670 gGL.getTexUnit(0)->activate();
697 glActiveTextureARB(GL_TEXTURE0_ARB);
698 stop_glerror(); 671 stop_glerror();
699 672
700 LLViewerImage::unbindTexture(1, GL_TEXTURE_2D); 673 LLViewerImage::unbindTexture(1, GL_TEXTURE_2D);
@@ -728,15 +701,15 @@ void LLDrawPoolBump::endBump()
728 } 701 }
729 702
730 // Disable texture unit 1 703 // Disable texture unit 1
731 glActiveTextureARB(GL_TEXTURE1_ARB); 704 gGL.getTexUnit(1)->activate();
732 glDisable(GL_TEXTURE_2D); // Texture unit 1 705 glDisable(GL_TEXTURE_2D); // Texture unit 1
733 glTexEnvi (GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); 706 gGL.getTexUnit(1)->setTextureBlendType(LLTexUnit::TB_MULT);
734 707
735 // Disable texture unit 0 708 // Disable texture unit 0
736 glActiveTextureARB(GL_TEXTURE0_ARB); 709 gGL.getTexUnit(0)->activate();
737 glTexEnvi (GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); 710 gGL.getTexUnit(0)->setTextureBlendType(LLTexUnit::TB_MULT);
738 711
739 gGL.blendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA ); 712 gGL.setSceneBlendType(LLRender::BT_ALPHA);
740} 713}
741 714
742//////////////////////////////////////////////////////////////// 715////////////////////////////////////////////////////////////////
@@ -1101,16 +1074,16 @@ void LLDrawPoolBump::pushBatch(LLDrawInfo& params, U32 mask, BOOL texture)
1101 { 1074 {
1102 if (mShiny) 1075 if (mShiny)
1103 { 1076 {
1104 glActiveTextureARB(GL_TEXTURE0_ARB); 1077 gGL.getTexUnit(0)->activate();
1105 glMatrixMode(GL_TEXTURE); 1078 glMatrixMode(GL_TEXTURE);
1106 } 1079 }
1107 else 1080 else
1108 { 1081 {
1109 glActiveTextureARB(GL_TEXTURE1_ARB); 1082 gGL.getTexUnit(1)->activate();
1110 glMatrixMode(GL_TEXTURE); 1083 glMatrixMode(GL_TEXTURE);
1111 glLoadMatrixf((GLfloat*) params.mTextureMatrix->mMatrix); 1084 glLoadMatrixf((GLfloat*) params.mTextureMatrix->mMatrix);
1112 gPipeline.mTextureMatrixOps++; 1085 gPipeline.mTextureMatrixOps++;
1113 glActiveTextureARB(GL_TEXTURE0_ARB); 1086 gGL.getTexUnit(0)->activate();
1114 } 1087 }
1115 1088
1116 glLoadMatrixf((GLfloat*) params.mTextureMatrix->mMatrix); 1089 glLoadMatrixf((GLfloat*) params.mTextureMatrix->mMatrix);
@@ -1153,13 +1126,13 @@ void LLDrawPoolBump::pushBatch(LLDrawInfo& params, U32 mask, BOOL texture)
1153 { 1126 {
1154 if (mShiny) 1127 if (mShiny)
1155 { 1128 {
1156 glActiveTextureARB(GL_TEXTURE0_ARB); 1129 gGL.getTexUnit(0)->activate();
1157 } 1130 }
1158 else 1131 else
1159 { 1132 {
1160 glActiveTextureARB(GL_TEXTURE1_ARB); 1133 gGL.getTexUnit(1)->activate();
1161 glLoadIdentity(); 1134 glLoadIdentity();
1162 glActiveTextureARB(GL_TEXTURE0_ARB); 1135 gGL.getTexUnit(0)->activate();
1163 } 1136 }
1164 glLoadIdentity(); 1137 glLoadIdentity();
1165 glMatrixMode(GL_MODELVIEW); 1138 glMatrixMode(GL_MODELVIEW);
@@ -1172,9 +1145,9 @@ void LLDrawPoolInvisible::render(S32 pass)
1172 1145
1173 U32 invisi_mask = LLVertexBuffer::MAP_VERTEX; 1146 U32 invisi_mask = LLVertexBuffer::MAP_VERTEX;
1174 glStencilMask(0); 1147 glStencilMask(0);
1175 glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE); 1148 gGL.setColorMask(false, false);
1176 pushBatches(LLRenderPass::PASS_INVISIBLE, invisi_mask, FALSE); 1149 pushBatches(LLRenderPass::PASS_INVISIBLE, invisi_mask, FALSE);
1177 glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_FALSE); 1150 gGL.setColorMask(true, false);
1178 glStencilMask(0xFFFFFFFF); 1151 glStencilMask(0xFFFFFFFF);
1179 1152
1180 if (gPipeline.hasRenderBatches(LLRenderPass::PASS_INVISI_SHINY)) 1153 if (gPipeline.hasRenderBatches(LLRenderPass::PASS_INVISI_SHINY))
diff --git a/linden/indra/newview/lldrawpoolsimple.cpp b/linden/indra/newview/lldrawpoolsimple.cpp
index 330ac57..d580e97 100644
--- a/linden/indra/newview/lldrawpoolsimple.cpp
+++ b/linden/indra/newview/lldrawpoolsimple.cpp
@@ -41,7 +41,7 @@
41#include "pipeline.h" 41#include "pipeline.h"
42#include "llspatialpartition.h" 42#include "llspatialpartition.h"
43#include "llglslshader.h" 43#include "llglslshader.h"
44#include "llglimmediate.h" 44#include "llrender.h"
45 45
46 46
47static LLGLSLShader* simple_shader = NULL; 47static LLGLSLShader* simple_shader = NULL;
@@ -52,7 +52,7 @@ void LLDrawPoolGlow::render(S32 pass)
52 LLFastTimer t(LLFastTimer::FTM_RENDER_GLOW); 52 LLFastTimer t(LLFastTimer::FTM_RENDER_GLOW);
53 LLGLEnable blend(GL_BLEND); 53 LLGLEnable blend(GL_BLEND);
54 LLGLDisable test(GL_ALPHA_TEST); 54 LLGLDisable test(GL_ALPHA_TEST);
55 gGL.blendFunc(GL_ONE, GL_ONE); 55 gGL.setSceneBlendType(LLRender::BT_ADD);
56 56
57 U32 shader_level = LLShaderMgr::getVertexShaderLevel(LLShaderMgr::SHADER_OBJECT); 57 U32 shader_level = LLShaderMgr::getVertexShaderLevel(LLShaderMgr::SHADER_OBJECT);
58 58
@@ -66,11 +66,11 @@ void LLDrawPoolGlow::render(S32 pass)
66 } 66 }
67 67
68 LLGLDepthTest depth(GL_TRUE, GL_FALSE); 68 LLGLDepthTest depth(GL_TRUE, GL_FALSE);
69 glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_TRUE); 69 gGL.setColorMask(false, true);
70 renderTexture(LLRenderPass::PASS_GLOW, getVertexDataMask()); 70 renderTexture(LLRenderPass::PASS_GLOW, getVertexDataMask());
71 71
72 glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_FALSE); 72 gGL.setColorMask(true, false);
73 gGL.blendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); 73 gGL.setSceneBlendType(LLRender::BT_ALPHA);
74 74
75 if (shader_level > 0 && fullbright_shader) 75 if (shader_level > 0 && fullbright_shader)
76 { 76 {
@@ -120,7 +120,7 @@ void LLDrawPoolSimple::beginRenderPass(S32 pass)
120 // don't use shaders! 120 // don't use shaders!
121 if (gGLManager.mHasShaderObjects) 121 if (gGLManager.mHasShaderObjects)
122 { 122 {
123 glUseProgramObjectARB(0); 123 LLGLSLShader::bindNoShader();
124 } 124 }
125 } 125 }
126} 126}
@@ -140,7 +140,7 @@ void LLDrawPoolSimple::render(S32 pass)
140{ 140{
141 LLGLDisable blend(GL_BLEND); 141 LLGLDisable blend(GL_BLEND);
142 LLGLState alpha_test(GL_ALPHA_TEST, gPipeline.canUseWindLightShadersOnObjects()); 142 LLGLState alpha_test(GL_ALPHA_TEST, gPipeline.canUseWindLightShadersOnObjects());
143 glAlphaFunc(GL_GREATER, 0.5f); 143 gGL.setAlphaRejectSettings(LLRender::CF_GREATER, 0.5f);
144 144
145 { //render simple 145 { //render simple
146 LLFastTimer t(LLFastTimer::FTM_RENDER_SIMPLE); 146 LLFastTimer t(LLFastTimer::FTM_RENDER_SIMPLE);
@@ -152,7 +152,7 @@ void LLDrawPoolSimple::render(S32 pass)
152 LLFastTimer t(LLFastTimer::FTM_RENDER_GRASS); 152 LLFastTimer t(LLFastTimer::FTM_RENDER_GRASS);
153 LLGLEnable test(GL_ALPHA_TEST); 153 LLGLEnable test(GL_ALPHA_TEST);
154 LLGLEnable blend(GL_BLEND); 154 LLGLEnable blend(GL_BLEND);
155 gGL.blendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); 155 gGL.setSceneBlendType(LLRender::BT_ALPHA);
156 //render grass 156 //render grass
157 LLRenderPass::renderTexture(LLRenderPass::PASS_GRASS, getVertexDataMask()); 157 LLRenderPass::renderTexture(LLRenderPass::PASS_GRASS, getVertexDataMask());
158 } 158 }
@@ -172,6 +172,6 @@ void LLDrawPoolSimple::render(S32 pass)
172 renderTexture(LLRenderPass::PASS_FULLBRIGHT, fullbright_mask); 172 renderTexture(LLRenderPass::PASS_FULLBRIGHT, fullbright_mask);
173 } 173 }
174 174
175 glAlphaFunc(GL_GREATER, 0.01f); 175 gGL.setAlphaRejectSettings(LLRender::CF_DEFAULT);
176} 176}
177 177
diff --git a/linden/indra/newview/lldrawpoolsky.cpp b/linden/indra/newview/lldrawpoolsky.cpp
index e06bb6d..8c63b83 100644
--- a/linden/indra/newview/lldrawpoolsky.cpp
+++ b/linden/indra/newview/lldrawpoolsky.cpp
@@ -90,7 +90,7 @@ void LLDrawPoolSky::render(S32 pass)
90 { 90 {
91 // Ironically, we must support shader objects to be 91 // Ironically, we must support shader objects to be
92 // able to use this call. 92 // able to use this call.
93 glUseProgramObjectARB(0); 93 LLGLSLShader::bindNoShader();
94 } 94 }
95 mShader = NULL; 95 mShader = NULL;
96 } 96 }
diff --git a/linden/indra/newview/lldrawpoolterrain.cpp b/linden/indra/newview/lldrawpoolterrain.cpp
index fdb27f9..2cd2fdb 100644
--- a/linden/indra/newview/lldrawpoolterrain.cpp
+++ b/linden/indra/newview/lldrawpoolterrain.cpp
@@ -52,7 +52,7 @@
52#include "llworld.h" 52#include "llworld.h"
53#include "pipeline.h" 53#include "pipeline.h"
54#include "llglslshader.h" 54#include "llglslshader.h"
55#include "llglimmediate.h" 55#include "llrender.h"
56 56
57const F32 DETAIL_SCALE = 1.f/16.f; 57const F32 DETAIL_SCALE = 1.f/16.f;
58int DebugDetailMap = 0; 58int DebugDetailMap = 0;
@@ -69,14 +69,16 @@ LLDrawPoolTerrain::LLDrawPoolTerrain(LLViewerImage *texturep) :
69 sDetailScale = 1.f/gSavedSettings.getF32("RenderTerrainScale"); 69 sDetailScale = 1.f/gSavedSettings.getF32("RenderTerrainScale");
70 sDetailMode = gSavedSettings.getS32("RenderTerrainDetail"); 70 sDetailMode = gSavedSettings.getS32("RenderTerrainDetail");
71 mAlphaRampImagep = gImageList.getImageFromFile("alpha_gradient.tga", 71 mAlphaRampImagep = gImageList.getImageFromFile("alpha_gradient.tga",
72 TRUE, TRUE, GL_ALPHA8, GL_ALPHA, 72 TRUE, TRUE, GL_ALPHA8, GL_ALPHA,
73 LLUUID("e97cf410-8e61-7005-ec06-629eba4cd1fb")); 73 LLUUID("e97cf410-8e61-7005-ec06-629eba4cd1fb"));
74
74 mAlphaRampImagep->bind(0); 75 mAlphaRampImagep->bind(0);
75 mAlphaRampImagep->setClamp(TRUE, TRUE); 76 mAlphaRampImagep->setClamp(TRUE, TRUE);
76 77
77 m2DAlphaRampImagep = gImageList.getImageFromFile("alpha_gradient_2d.j2c", 78 m2DAlphaRampImagep = gImageList.getImageFromFile("alpha_gradient_2d.j2c",
78 TRUE, TRUE, GL_ALPHA8, GL_ALPHA, 79 TRUE, TRUE, GL_ALPHA8, GL_ALPHA,
79 LLUUID("38b86f85-2575-52a9-a531-23108d8da837")); 80 LLUUID("38b86f85-2575-52a9-a531-23108d8da837"));
81
80 m2DAlphaRampImagep->bind(0); 82 m2DAlphaRampImagep->bind(0);
81 m2DAlphaRampImagep->setClamp(TRUE, TRUE); 83 m2DAlphaRampImagep->setClamp(TRUE, TRUE);
82 84
@@ -239,7 +241,7 @@ void LLDrawPoolTerrain::renderFullShader()
239 // 241 //
240 S32 detail0 = sShader->enableTexture(LLShaderMgr::TERRAIN_DETAIL0); 242 S32 detail0 = sShader->enableTexture(LLShaderMgr::TERRAIN_DETAIL0);
241 LLViewerImage::bindTexture(detail_texture0p,detail0); 243 LLViewerImage::bindTexture(detail_texture0p,detail0);
242 glActiveTextureARB(GL_TEXTURE0_ARB); 244 gGL.getTexUnit(0)->activate();
243 245
244 glEnable(GL_TEXTURE_GEN_S); 246 glEnable(GL_TEXTURE_GEN_S);
245 glEnable(GL_TEXTURE_GEN_T); 247 glEnable(GL_TEXTURE_GEN_T);
@@ -259,7 +261,7 @@ void LLDrawPoolTerrain::renderFullShader()
259 LLViewerImage::bindTexture(detail_texture1p,detail1); 261 LLViewerImage::bindTexture(detail_texture1p,detail1);
260 262
261 /// ALPHA TEXTURE COORDS 0: 263 /// ALPHA TEXTURE COORDS 0:
262 glActiveTextureARB(GL_TEXTURE1_ARB); 264 gGL.getTexUnit(1)->activate();
263 glMatrixMode(GL_TEXTURE); 265 glMatrixMode(GL_TEXTURE);
264 glLoadIdentity(); 266 glLoadIdentity();
265 glMatrixMode(GL_MODELVIEW); 267 glMatrixMode(GL_MODELVIEW);
@@ -271,7 +273,7 @@ void LLDrawPoolTerrain::renderFullShader()
271 glEnable(GL_TEXTURE_2D); 273 glEnable(GL_TEXTURE_2D);
272 274
273 /// ALPHA TEXTURE COORDS 1: 275 /// ALPHA TEXTURE COORDS 1:
274 glActiveTextureARB(GL_TEXTURE2_ARB); 276 gGL.getTexUnit(2)->activate();
275 glMatrixMode(GL_TEXTURE); 277 glMatrixMode(GL_TEXTURE);
276 glLoadIdentity(); 278 glLoadIdentity();
277 glTranslatef(-2.f, 0.f, 0.f); 279 glTranslatef(-2.f, 0.f, 0.f);
@@ -284,7 +286,7 @@ void LLDrawPoolTerrain::renderFullShader()
284 LLViewerImage::bindTexture(detail_texture3p,detail3); 286 LLViewerImage::bindTexture(detail_texture3p,detail3);
285 287
286 /// ALPHA TEXTURE COORDS 2: 288 /// ALPHA TEXTURE COORDS 2:
287 glActiveTextureARB(GL_TEXTURE3_ARB); 289 gGL.getTexUnit(3)->activate();
288 glMatrixMode(GL_TEXTURE); 290 glMatrixMode(GL_TEXTURE);
289 glLoadIdentity(); 291 glLoadIdentity();
290 glTranslatef(-1.f, 0.f, 0.f); 292 glTranslatef(-1.f, 0.f, 0.f);
@@ -307,7 +309,7 @@ void LLDrawPoolTerrain::renderFullShader()
307 sShader->disableTexture(LLShaderMgr::TERRAIN_DETAIL3); 309 sShader->disableTexture(LLShaderMgr::TERRAIN_DETAIL3);
308 310
309 LLImageGL::unbindTexture(alpha_ramp, GL_TEXTURE_2D); 311 LLImageGL::unbindTexture(alpha_ramp, GL_TEXTURE_2D);
310 glActiveTextureARB(GL_TEXTURE4_ARB); 312 gGL.getTexUnit(4)->activate();
311 glDisable(GL_TEXTURE_2D); // Texture unit 4 313 glDisable(GL_TEXTURE_2D); // Texture unit 4
312 glDisable(GL_TEXTURE_GEN_S); 314 glDisable(GL_TEXTURE_GEN_S);
313 glDisable(GL_TEXTURE_GEN_T); 315 glDisable(GL_TEXTURE_GEN_T);
@@ -316,7 +318,7 @@ void LLDrawPoolTerrain::renderFullShader()
316 glMatrixMode(GL_MODELVIEW); 318 glMatrixMode(GL_MODELVIEW);
317 319
318 LLImageGL::unbindTexture(detail3, GL_TEXTURE_2D); 320 LLImageGL::unbindTexture(detail3, GL_TEXTURE_2D);
319 glActiveTextureARB(GL_TEXTURE3_ARB); 321 gGL.getTexUnit(3)->activate();
320 glDisable(GL_TEXTURE_2D); 322 glDisable(GL_TEXTURE_2D);
321 glDisable(GL_TEXTURE_GEN_S); 323 glDisable(GL_TEXTURE_GEN_S);
322 glDisable(GL_TEXTURE_GEN_T); 324 glDisable(GL_TEXTURE_GEN_T);
@@ -325,7 +327,7 @@ void LLDrawPoolTerrain::renderFullShader()
325 glMatrixMode(GL_MODELVIEW); 327 glMatrixMode(GL_MODELVIEW);
326 328
327 LLImageGL::unbindTexture(detail2, GL_TEXTURE_2D); 329 LLImageGL::unbindTexture(detail2, GL_TEXTURE_2D);
328 glActiveTextureARB(GL_TEXTURE2_ARB); 330 gGL.getTexUnit(2)->activate();
329 glDisable(GL_TEXTURE_2D); 331 glDisable(GL_TEXTURE_2D);
330 glDisable(GL_TEXTURE_GEN_S); 332 glDisable(GL_TEXTURE_GEN_S);
331 glDisable(GL_TEXTURE_GEN_T); 333 glDisable(GL_TEXTURE_GEN_T);
@@ -334,7 +336,7 @@ void LLDrawPoolTerrain::renderFullShader()
334 glMatrixMode(GL_MODELVIEW); 336 glMatrixMode(GL_MODELVIEW);
335 337
336 LLImageGL::unbindTexture(detail1, GL_TEXTURE_2D); 338 LLImageGL::unbindTexture(detail1, GL_TEXTURE_2D);
337 glActiveTextureARB(GL_TEXTURE1_ARB); 339 gGL.getTexUnit(1)->activate();
338 glDisable(GL_TEXTURE_2D); 340 glDisable(GL_TEXTURE_2D);
339 glDisable(GL_TEXTURE_GEN_S); 341 glDisable(GL_TEXTURE_GEN_S);
340 glDisable(GL_TEXTURE_GEN_T); 342 glDisable(GL_TEXTURE_GEN_T);
@@ -346,7 +348,7 @@ void LLDrawPoolTerrain::renderFullShader()
346 // Restore Texture Unit 0 defaults 348 // Restore Texture Unit 0 defaults
347 349
348 LLImageGL::unbindTexture(detail0, GL_TEXTURE_2D); 350 LLImageGL::unbindTexture(detail0, GL_TEXTURE_2D);
349 glActiveTextureARB(GL_TEXTURE0_ARB); 351 gGL.getTexUnit(0)->activate();
350 glEnable(GL_TEXTURE_2D); 352 glEnable(GL_TEXTURE_2D);
351 glDisable(GL_TEXTURE_GEN_S); 353 glDisable(GL_TEXTURE_GEN_S);
352 glDisable(GL_TEXTURE_GEN_T); 354 glDisable(GL_TEXTURE_GEN_T);
@@ -357,7 +359,7 @@ void LLDrawPoolTerrain::renderFullShader()
357 359
358void LLDrawPoolTerrain::renderFull4TU() 360void LLDrawPoolTerrain::renderFull4TU()
359{ 361{
360 glEnableClientState(GL_VERTEX_ARRAY); 362 glEnableClientState(GL_VERTEX_ARRAY);
361 glEnableClientState(GL_NORMAL_ARRAY); 363 glEnableClientState(GL_NORMAL_ARRAY);
362 364
363 // Hack! Get the region that this draw pool is rendering from! 365 // Hack! Get the region that this draw pool is rendering from!
@@ -377,7 +379,7 @@ void LLDrawPoolTerrain::renderFull4TU()
377 tp0.setVec(sDetailScale, 0.0f, 0.0f, offset_x); 379 tp0.setVec(sDetailScale, 0.0f, 0.0f, offset_x);
378 tp1.setVec(0.0f, sDetailScale, 0.0f, offset_y); 380 tp1.setVec(0.0f, sDetailScale, 0.0f, offset_y);
379 381
380 gGL.blendFunc(GL_ONE_MINUS_SRC_ALPHA, GL_SRC_ALPHA); 382 gGL.blendFunc(LLRender::BF_ONE_MINUS_SOURCE_ALPHA, LLRender::BF_SOURCE_ALPHA);
381 383
382 //---------------------------------------------------------------------------- 384 //----------------------------------------------------------------------------
383 // Pass 1/1 385 // Pass 1/1
@@ -385,11 +387,10 @@ void LLDrawPoolTerrain::renderFull4TU()
385 // 387 //
386 // Stage 0: detail texture 0 388 // Stage 0: detail texture 0
387 // 389 //
388 glActiveTextureARB(GL_TEXTURE0_ARB); 390 gGL.getTexUnit(0)->activate();
389 LLViewerImage::bindTexture(detail_texture0p,0); 391 LLViewerImage::bindTexture(detail_texture0p,0);
390 glClientActiveTextureARB(GL_TEXTURE0_ARB); 392 glClientActiveTextureARB(GL_TEXTURE0_ARB);
391 393
392 glDisableClientState(GL_TEXTURE_COORD_ARRAY);
393 glEnable(GL_TEXTURE_GEN_S); 394 glEnable(GL_TEXTURE_GEN_S);
394 glEnable(GL_TEXTURE_GEN_T); 395 glEnable(GL_TEXTURE_GEN_T);
395 glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR); 396 glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR);
@@ -398,36 +399,27 @@ void LLDrawPoolTerrain::renderFull4TU()
398 glTexGenfv(GL_S, GL_OBJECT_PLANE, tp0.mV); 399 glTexGenfv(GL_S, GL_OBJECT_PLANE, tp0.mV);
399 glTexGenfv(GL_T, GL_OBJECT_PLANE, tp1.mV); 400 glTexGenfv(GL_T, GL_OBJECT_PLANE, tp1.mV);
400 401
401 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB); 402 gGL.getTexUnit(0)->setTextureColorBlend(LLTexUnit::TBO_REPLACE, LLTexUnit::TBS_TEX_COLOR);
402 glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_REPLACE);
403
404 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB, GL_TEXTURE);
405 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB_ARB, GL_SRC_COLOR);
406 403
407 // 404 //
408 // Stage 1: Generate alpha ramp for detail0/detail1 transition 405 // Stage 1: Generate alpha ramp for detail0/detail1 transition
409 // 406 //
407
410 LLViewerImage::bindTexture(m2DAlphaRampImagep,1); 408 LLViewerImage::bindTexture(m2DAlphaRampImagep,1);
411 glActiveTextureARB(GL_TEXTURE1_ARB); 409 gGL.getTexUnit(1)->activate();
412 glEnable(GL_TEXTURE_2D); // Texture unit 1 410 glEnable(GL_TEXTURE_2D); // Texture unit 1
413 glClientActiveTextureARB(GL_TEXTURE1_ARB); 411 glClientActiveTextureARB(GL_TEXTURE1_ARB);
414 glEnableClientState(GL_TEXTURE_COORD_ARRAY); 412 glEnableClientState(GL_TEXTURE_COORD_ARRAY);
415 413
416 // Care about alpha only 414 // Care about alpha only
417 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB); 415 gGL.getTexUnit(1)->setTextureColorBlend(LLTexUnit::TBO_REPLACE, LLTexUnit::TBS_PREV_COLOR);
418 glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_REPLACE); 416 gGL.getTexUnit(1)->setTextureAlphaBlend(LLTexUnit::TBO_REPLACE, LLTexUnit::TBS_TEX_ALPHA);
419 glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA_ARB, GL_REPLACE);
420
421 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB, GL_PREVIOUS);
422 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB_ARB, GL_SRC_COLOR);
423 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA_ARB, GL_TEXTURE);
424 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_ALPHA_ARB, GL_SRC_ALPHA);
425 417
426 // 418 //
427 // Stage 2: Interpolate detail1 with existing based on ramp 419 // Stage 2: Interpolate detail1 with existing based on ramp
428 // 420 //
429 LLViewerImage::bindTexture(detail_texture1p,2); 421 LLViewerImage::bindTexture(detail_texture1p,2);
430 glActiveTextureARB(GL_TEXTURE2_ARB); 422 gGL.getTexUnit(2)->activate();
431 glEnable(GL_TEXTURE_2D); // Texture unit 2 423 glEnable(GL_TEXTURE_2D); // Texture unit 2
432 glClientActiveTextureARB(GL_TEXTURE2_ARB); 424 glClientActiveTextureARB(GL_TEXTURE2_ARB);
433 425
@@ -439,34 +431,22 @@ void LLDrawPoolTerrain::renderFull4TU()
439 glTexGenfv(GL_S, GL_OBJECT_PLANE, tp0.mV); 431 glTexGenfv(GL_S, GL_OBJECT_PLANE, tp0.mV);
440 glTexGenfv(GL_T, GL_OBJECT_PLANE, tp1.mV); 432 glTexGenfv(GL_T, GL_OBJECT_PLANE, tp1.mV);
441 433
442 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB); 434 gGL.getTexUnit(2)->setTextureColorBlend(LLTexUnit::TBO_LERP_PREV_ALPHA, LLTexUnit::TBS_PREV_COLOR, LLTexUnit::TBS_TEX_COLOR);
443 glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_INTERPOLATE);
444
445 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB, GL_PREVIOUS_ARB);
446 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB_ARB, GL_SRC_COLOR);
447 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_RGB_ARB, GL_TEXTURE);
448 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_RGB_ARB, GL_SRC_COLOR);
449 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE2_RGB_ARB, GL_PREVIOUS_ARB);
450 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND2_RGB_ARB, GL_SRC_ALPHA);
451 435
452 // 436 //
453 // Stage 3: Modulate with primary (vertex) color for lighting 437 // Stage 3: Modulate with primary (vertex) color for lighting
454 // 438 //
455 LLViewerImage::bindTexture(detail_texture1p,3); // bind any texture 439 LLViewerImage::bindTexture(detail_texture1p,3); // bind any texture
456 glActiveTextureARB(GL_TEXTURE3_ARB); 440 gGL.getTexUnit(3)->activate();
457 glEnable(GL_TEXTURE_2D); // Texture unit 3 441 glEnable(GL_TEXTURE_2D); // Texture unit 3
458 glClientActiveTextureARB(GL_TEXTURE3_ARB); 442 glClientActiveTextureARB(GL_TEXTURE3_ARB);
459 443
460 // Set alpha texture and do lighting modulation 444 // Set alpha texture and do lighting modulation
461 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB); 445 gGL.getTexUnit(3)->setTextureColorBlend(LLTexUnit::TBO_MULT, LLTexUnit::TBS_PREV_COLOR, LLTexUnit::TBS_VERT_COLOR);
462 glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_MODULATE);
463 446
464 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB, GL_PREVIOUS); 447 gGL.getTexUnit(0)->activate();
465 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB_ARB, GL_SRC_COLOR); 448 glClientActiveTextureARB(GL_TEXTURE0_ARB);
466 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_RGB_ARB, GL_PRIMARY_COLOR_ARB);
467 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_RGB_ARB, GL_SRC_COLOR);
468 449
469 glActiveTextureARB(GL_TEXTURE0_ARB);
470 // GL_BLEND disabled by default 450 // GL_BLEND disabled by default
471 drawLoop(); 451 drawLoop();
472 452
@@ -475,7 +455,7 @@ void LLDrawPoolTerrain::renderFull4TU()
475 455
476 // Stage 0: Write detail3 into base 456 // Stage 0: Write detail3 into base
477 // 457 //
478 glActiveTextureARB(GL_TEXTURE0_ARB); 458 gGL.getTexUnit(0)->activate();
479 LLViewerImage::bindTexture(detail_texture3p,0); 459 LLViewerImage::bindTexture(detail_texture3p,0);
480 glClientActiveTextureARB(GL_TEXTURE0_ARB); 460 glClientActiveTextureARB(GL_TEXTURE0_ARB);
481 461
@@ -487,18 +467,13 @@ void LLDrawPoolTerrain::renderFull4TU()
487 glTexGenfv(GL_S, GL_OBJECT_PLANE, tp0.mV); 467 glTexGenfv(GL_S, GL_OBJECT_PLANE, tp0.mV);
488 glTexGenfv(GL_T, GL_OBJECT_PLANE, tp1.mV); 468 glTexGenfv(GL_T, GL_OBJECT_PLANE, tp1.mV);
489 469
490 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB); 470 gGL.getTexUnit(0)->setTextureColorBlend(LLTexUnit::TBO_REPLACE, LLTexUnit::TBS_TEX_COLOR);
491 glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_REPLACE);
492
493 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB, GL_TEXTURE);
494 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB_ARB, GL_SRC_COLOR);
495
496 471
497 // 472 //
498 // Stage 1: Generate alpha ramp for detail2/detail3 transition 473 // Stage 1: Generate alpha ramp for detail2/detail3 transition
499 // 474 //
500 LLViewerImage::bindTexture(m2DAlphaRampImagep,1); 475 LLViewerImage::bindTexture(m2DAlphaRampImagep,1);
501 glActiveTextureARB(GL_TEXTURE1_ARB); 476 gGL.getTexUnit(1)->activate();
502 glEnable(GL_TEXTURE_2D); // Texture unit 1 477 glEnable(GL_TEXTURE_2D); // Texture unit 1
503 glClientActiveTextureARB(GL_TEXTURE1_ARB); 478 glClientActiveTextureARB(GL_TEXTURE1_ARB);
504 479
@@ -510,25 +485,20 @@ void LLDrawPoolTerrain::renderFull4TU()
510 glTranslatef(-2.f, 0.f, 0.f); 485 glTranslatef(-2.f, 0.f, 0.f);
511 486
512 // Care about alpha only 487 // Care about alpha only
513 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB); 488 gGL.getTexUnit(1)->setTextureColorBlend(LLTexUnit::TBO_REPLACE, LLTexUnit::TBS_PREV_COLOR);
514 glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_REPLACE); 489 gGL.getTexUnit(1)->setTextureAlphaBlend(LLTexUnit::TBO_REPLACE, LLTexUnit::TBS_TEX_ALPHA);
515 glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA_ARB, GL_REPLACE);
516
517 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB, GL_PREVIOUS);
518 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB_ARB, GL_SRC_COLOR);
519 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA_ARB, GL_TEXTURE);
520 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_ALPHA_ARB, GL_SRC_ALPHA);
521 490
522 491
523 // 492 //
524 // Stage 2: Interpolate detail2 with existing based on ramp 493 // Stage 2: Interpolate detail2 with existing based on ramp
525 // 494 //
526 LLViewerImage::bindTexture(detail_texture2p,2); 495 LLViewerImage::bindTexture(detail_texture2p,2);
527 glActiveTextureARB(GL_TEXTURE2_ARB); 496 gGL.getTexUnit(2)->activate();
528 glEnable(GL_TEXTURE_2D); // Texture unit 2 497 glEnable(GL_TEXTURE_2D); // Texture unit 2
529 glClientActiveTextureARB(GL_TEXTURE2_ARB);
530 498
499 glClientActiveTextureARB(GL_TEXTURE2_ARB);
531 glDisableClientState(GL_TEXTURE_COORD_ARRAY); 500 glDisableClientState(GL_TEXTURE_COORD_ARRAY);
501
532 glEnable(GL_TEXTURE_GEN_S); 502 glEnable(GL_TEXTURE_GEN_S);
533 glEnable(GL_TEXTURE_GEN_T); 503 glEnable(GL_TEXTURE_GEN_T);
534 glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR); 504 glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR);
@@ -536,26 +506,16 @@ void LLDrawPoolTerrain::renderFull4TU()
536 glTexGenfv(GL_S, GL_OBJECT_PLANE, tp0.mV); 506 glTexGenfv(GL_S, GL_OBJECT_PLANE, tp0.mV);
537 glTexGenfv(GL_T, GL_OBJECT_PLANE, tp1.mV); 507 glTexGenfv(GL_T, GL_OBJECT_PLANE, tp1.mV);
538 508
539 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB); 509 gGL.getTexUnit(2)->setTextureColorBlend(LLTexUnit::TBO_LERP_PREV_ALPHA, LLTexUnit::TBS_TEX_COLOR, LLTexUnit::TBS_PREV_COLOR);
540 glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_INTERPOLATE);
541
542 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB, GL_PREVIOUS_ARB);
543 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB_ARB, GL_SRC_COLOR);
544 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_RGB_ARB, GL_TEXTURE);
545 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_RGB_ARB, GL_SRC_COLOR);
546 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE2_RGB_ARB, GL_PREVIOUS_ARB);
547 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND2_RGB_ARB, GL_ONE_MINUS_SRC_ALPHA);
548
549 510
550 // 511 //
551 // Stage 3: Generate alpha ramp for detail1/detail2 transition 512 // Stage 3: Generate alpha ramp for detail1/detail2 transition
552 // 513 //
553 LLViewerImage::bindTexture(m2DAlphaRampImagep,3); 514 LLViewerImage::bindTexture(m2DAlphaRampImagep,3);
554 glActiveTextureARB(GL_TEXTURE3_ARB); 515 gGL.getTexUnit(3)->activate();
555
556 glEnable(GL_TEXTURE_2D); // Texture unit 3 516 glEnable(GL_TEXTURE_2D); // Texture unit 3
557 glClientActiveTextureARB(GL_TEXTURE3_ARB);
558 517
518 glClientActiveTextureARB(GL_TEXTURE3_ARB);
559 glEnableClientState(GL_TEXTURE_COORD_ARRAY); 519 glEnableClientState(GL_TEXTURE_COORD_ARRAY);
560 520
561 // Set the texture matrix 521 // Set the texture matrix
@@ -564,38 +524,34 @@ void LLDrawPoolTerrain::renderFull4TU()
564 glTranslatef(-1.f, 0.f, 0.f); 524 glTranslatef(-1.f, 0.f, 0.f);
565 525
566 // Set alpha texture and do lighting modulation 526 // Set alpha texture and do lighting modulation
567 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB); 527 gGL.getTexUnit(3)->setTextureColorBlend(LLTexUnit::TBO_MULT, LLTexUnit::TBS_PREV_COLOR, LLTexUnit::TBS_VERT_COLOR);
568 glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_MODULATE); 528 gGL.getTexUnit(3)->setTextureAlphaBlend(LLTexUnit::TBO_REPLACE, LLTexUnit::TBS_TEX_ALPHA);
569 glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA_ARB, GL_REPLACE); 529
570 530 gGL.getTexUnit(0)->activate();
571 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB, GL_PREVIOUS); 531 glClientActiveTextureARB(GL_TEXTURE0_ARB);
572 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB_ARB, GL_SRC_COLOR);
573 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_RGB_ARB, GL_PRIMARY_COLOR_ARB);
574 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_RGB_ARB, GL_SRC_COLOR);
575 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA_ARB, GL_TEXTURE);
576 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_ALPHA_ARB, GL_SRC_ALPHA);
577
578 glActiveTextureARB(GL_TEXTURE0_ARB);
579 { 532 {
580 LLGLEnable blend(GL_BLEND); 533 LLGLEnable blend(GL_BLEND);
581 drawLoop(); 534 drawLoop();
582 } 535 }
583 536
537 LLVertexBuffer::unbind();
584 // Disable multitexture 538 // Disable multitexture
585 LLImageGL::unbindTexture(3, GL_TEXTURE_2D); 539 LLImageGL::unbindTexture(3, GL_TEXTURE_2D);
586 glActiveTextureARB(GL_TEXTURE3_ARB); 540 gGL.getTexUnit(3)->activate();
587 glClientActiveTextureARB(GL_TEXTURE3_ARB); 541 glClientActiveTextureARB(GL_TEXTURE3_ARB);
588 glDisableClientState(GL_TEXTURE_COORD_ARRAY); 542 glDisableClientState(GL_TEXTURE_COORD_ARRAY);
589 glDisable(GL_TEXTURE_2D); // Texture unit 3 543 glDisable(GL_TEXTURE_2D); // Texture unit 3
544
590 glMatrixMode(GL_TEXTURE); 545 glMatrixMode(GL_TEXTURE);
591 glLoadIdentity(); 546 glLoadIdentity();
592 glMatrixMode(GL_MODELVIEW); 547 glMatrixMode(GL_MODELVIEW);
593 548
594 LLImageGL::unbindTexture(2, GL_TEXTURE_2D); 549 LLImageGL::unbindTexture(2, GL_TEXTURE_2D);
595 glActiveTextureARB(GL_TEXTURE2_ARB); 550 gGL.getTexUnit(2)->activate();
596 glClientActiveTextureARB(GL_TEXTURE2_ARB); 551 glClientActiveTextureARB(GL_TEXTURE2_ARB);
597 glDisableClientState(GL_TEXTURE_COORD_ARRAY); 552 glDisableClientState(GL_TEXTURE_COORD_ARRAY);
598 glDisable(GL_TEXTURE_2D); // Texture unit 2 553 glDisable(GL_TEXTURE_2D); // Texture unit 2
554
599 glDisable(GL_TEXTURE_GEN_S); 555 glDisable(GL_TEXTURE_GEN_S);
600 glDisable(GL_TEXTURE_GEN_T); 556 glDisable(GL_TEXTURE_GEN_T);
601 glMatrixMode(GL_TEXTURE); 557 glMatrixMode(GL_TEXTURE);
@@ -603,33 +559,34 @@ void LLDrawPoolTerrain::renderFull4TU()
603 glMatrixMode(GL_MODELVIEW); 559 glMatrixMode(GL_MODELVIEW);
604 560
605 LLImageGL::unbindTexture(1, GL_TEXTURE_2D); 561 LLImageGL::unbindTexture(1, GL_TEXTURE_2D);
606 glActiveTextureARB(GL_TEXTURE1_ARB); 562 gGL.getTexUnit(1)->activate();
607 glClientActiveTextureARB(GL_TEXTURE1_ARB); 563 glClientActiveTextureARB(GL_TEXTURE1_ARB);
608 glDisableClientState(GL_TEXTURE_COORD_ARRAY); 564 glDisableClientState(GL_TEXTURE_COORD_ARRAY);
609 glDisable(GL_TEXTURE_2D); // Texture unit 1 565 glDisable(GL_TEXTURE_2D); // Texture unit 1
566
610 glMatrixMode(GL_TEXTURE); 567 glMatrixMode(GL_TEXTURE);
611 glLoadIdentity(); 568 glLoadIdentity();
612 glMatrixMode(GL_MODELVIEW); 569 glMatrixMode(GL_MODELVIEW);
613 570
614 // Restore blend state 571 // Restore blend state
615 gGL.blendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); 572 gGL.setSceneBlendType(LLRender::BT_ALPHA);
616 573
617 //---------------------------------------------------------------------------- 574 //----------------------------------------------------------------------------
618 // Restore Texture Unit 0 defaults 575 // Restore Texture Unit 0 defaults
619 576
620 glActiveTextureARB(GL_TEXTURE0_ARB); 577 gGL.getTexUnit(0)->activate();
621 LLImageGL::unbindTexture(0, GL_TEXTURE_2D); 578 LLImageGL::unbindTexture(0, GL_TEXTURE_2D);
622 glClientActiveTextureARB(GL_TEXTURE0_ARB); 579 glClientActiveTextureARB(GL_TEXTURE0_ARB);
623 glActiveTextureARB(GL_TEXTURE0_ARB); 580 gGL.getTexUnit(0)->activate();
581 glDisableClientState(GL_NORMAL_ARRAY);
582
624 glDisable(GL_TEXTURE_GEN_S); 583 glDisable(GL_TEXTURE_GEN_S);
625 glDisable(GL_TEXTURE_GEN_T); 584 glDisable(GL_TEXTURE_GEN_T);
626 glMatrixMode(GL_TEXTURE); 585 glMatrixMode(GL_TEXTURE);
627 glLoadIdentity(); 586 glLoadIdentity();
628 glMatrixMode(GL_MODELVIEW); 587 glMatrixMode(GL_MODELVIEW);
629 588
630 // Restore non Texture Unit specific defaults 589 gGL.getTexUnit(0)->setTextureBlendType(LLTexUnit::TB_MULT);
631 glDisableClientState(GL_NORMAL_ARRAY);
632 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
633} 590}
634 591
635void LLDrawPoolTerrain::renderFull2TU() 592void LLDrawPoolTerrain::renderFull2TU()
@@ -651,7 +608,7 @@ void LLDrawPoolTerrain::renderFull2TU()
651 tp0.setVec(sDetailScale, 0.0f, 0.0f, offset_x); 608 tp0.setVec(sDetailScale, 0.0f, 0.0f, offset_x);
652 tp1.setVec(0.0f, sDetailScale, 0.0f, offset_y); 609 tp1.setVec(0.0f, sDetailScale, 0.0f, offset_y);
653 610
654 gGL.blendFunc(GL_ONE_MINUS_SRC_ALPHA, GL_SRC_ALPHA); 611 gGL.blendFunc(LLRender::BF_ONE_MINUS_SOURCE_ALPHA, LLRender::BF_SOURCE_ALPHA);
655 612
656 //---------------------------------------------------------------------------- 613 //----------------------------------------------------------------------------
657 // Pass 1/4 614 // Pass 1/4
@@ -668,13 +625,7 @@ void LLDrawPoolTerrain::renderFull2TU()
668 glTexGenfv(GL_S, GL_OBJECT_PLANE, tp0.mV); 625 glTexGenfv(GL_S, GL_OBJECT_PLANE, tp0.mV);
669 glTexGenfv(GL_T, GL_OBJECT_PLANE, tp1.mV); 626 glTexGenfv(GL_T, GL_OBJECT_PLANE, tp1.mV);
670 627
671 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB); 628 gGL.getTexUnit(0)->setTextureColorBlend(LLTexUnit::TBO_MULT, LLTexUnit::TBS_TEX_COLOR, LLTexUnit::TBS_VERT_COLOR);
672 glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_MODULATE);
673
674 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB, GL_TEXTURE);
675 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB_ARB, GL_SRC_COLOR);
676 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_RGB_ARB, GL_PRIMARY_COLOR_ARB);
677 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_RGB_ARB, GL_SRC_COLOR);
678 629
679 drawLoop(); 630 drawLoop();
680 631
@@ -690,22 +641,17 @@ void LLDrawPoolTerrain::renderFull2TU()
690 glDisable(GL_TEXTURE_GEN_T); 641 glDisable(GL_TEXTURE_GEN_T);
691 642
692 // Care about alpha only 643 // Care about alpha only
693 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB); 644 gGL.getTexUnit(0)->setTextureColorBlend(LLTexUnit::TBO_REPLACE, LLTexUnit::TBS_PREV_COLOR);
694 glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_REPLACE); 645 gGL.getTexUnit(0)->setTextureAlphaBlend(LLTexUnit::TBO_REPLACE, LLTexUnit::TBS_TEX_ALPHA);
695 glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA_ARB, GL_REPLACE);
696
697 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB, GL_PREVIOUS);
698 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB_ARB, GL_SRC_COLOR);
699 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA_ARB, GL_TEXTURE);
700 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_ALPHA_ARB, GL_SRC_ALPHA);
701 646
702 647
703 // 648 //
704 // Stage 1: Write detail1 649 // Stage 1: Write detail1
705 // 650 //
706 LLViewerImage::bindTexture(detail_texture1p,1); // Texture unit 1 651 LLViewerImage::bindTexture(detail_texture1p,1); // Texture unit 1
707 glActiveTextureARB(GL_TEXTURE1_ARB); 652 gGL.getTexUnit(1)->activate();
708 glEnable(GL_TEXTURE_2D); // Texture unit 1 653 glEnable(GL_TEXTURE_2D); // Texture unit 1
654
709 glEnable(GL_TEXTURE_GEN_S); 655 glEnable(GL_TEXTURE_GEN_S);
710 glEnable(GL_TEXTURE_GEN_T); 656 glEnable(GL_TEXTURE_GEN_T);
711 glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR); 657 glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR);
@@ -713,18 +659,10 @@ void LLDrawPoolTerrain::renderFull2TU()
713 glTexGenfv(GL_S, GL_OBJECT_PLANE, tp0.mV); 659 glTexGenfv(GL_S, GL_OBJECT_PLANE, tp0.mV);
714 glTexGenfv(GL_T, GL_OBJECT_PLANE, tp1.mV); 660 glTexGenfv(GL_T, GL_OBJECT_PLANE, tp1.mV);
715 661
716 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB); 662 gGL.getTexUnit(1)->setTextureColorBlend(LLTexUnit::TBO_MULT, LLTexUnit::TBS_TEX_COLOR, LLTexUnit::TBS_VERT_COLOR);
717 glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_MODULATE); 663 gGL.getTexUnit(1)->setTextureAlphaBlend(LLTexUnit::TBO_REPLACE, LLTexUnit::TBS_PREV_ALPHA);
718 glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA_ARB, GL_REPLACE);
719 664
720 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB, GL_TEXTURE); 665 gGL.getTexUnit(0)->activate();
721 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB_ARB, GL_SRC_COLOR);
722 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_RGB_ARB, GL_PRIMARY_COLOR_ARB);
723 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_RGB_ARB, GL_SRC_COLOR);
724 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA_ARB, GL_PREVIOUS);
725 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_ALPHA_ARB, GL_SRC_ALPHA);
726
727 glActiveTextureARB(GL_TEXTURE0_ARB);
728 { 666 {
729 LLGLEnable blend(GL_BLEND); 667 LLGLEnable blend(GL_BLEND);
730 drawLoop(); 668 drawLoop();
@@ -736,26 +674,21 @@ void LLDrawPoolTerrain::renderFull2TU()
736 // Stage 0: Generate alpha ramp for detail1/detail2 transition 674 // Stage 0: Generate alpha ramp for detail1/detail2 transition
737 // 675 //
738 LLViewerImage::bindTexture(m2DAlphaRampImagep,0); 676 LLViewerImage::bindTexture(m2DAlphaRampImagep,0);
677
739 // Set the texture matrix 678 // Set the texture matrix
740 glMatrixMode(GL_TEXTURE); 679 glMatrixMode(GL_TEXTURE);
741 glLoadIdentity(); 680 glLoadIdentity();
742 glTranslatef(-1.f, 0.f, 0.f); 681 glTranslatef(-1.f, 0.f, 0.f);
743 682
744 // Care about alpha only 683 // Care about alpha only
745 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB); 684 gGL.getTexUnit(0)->setTextureColorBlend(LLTexUnit::TBO_REPLACE, LLTexUnit::TBS_PREV_COLOR);
746 glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_REPLACE); 685 gGL.getTexUnit(0)->setTextureAlphaBlend(LLTexUnit::TBO_REPLACE, LLTexUnit::TBS_TEX_ALPHA);
747 glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA_ARB, GL_REPLACE);
748
749 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB, GL_PREVIOUS);
750 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB_ARB, GL_SRC_COLOR);
751 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA_ARB, GL_TEXTURE);
752 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_ALPHA_ARB, GL_SRC_ALPHA);
753 686
754 // 687 //
755 // Stage 1: Write detail2 688 // Stage 1: Write detail2
756 // 689 //
757
758 LLViewerImage::bindTexture(detail_texture2p,1); 690 LLViewerImage::bindTexture(detail_texture2p,1);
691 gGL.getTexUnit(1)->activate();
759 glEnable(GL_TEXTURE_2D); // Texture unit 1 692 glEnable(GL_TEXTURE_2D); // Texture unit 1
760 693
761 glEnable(GL_TEXTURE_GEN_S); 694 glEnable(GL_TEXTURE_GEN_S);
@@ -765,16 +698,8 @@ void LLDrawPoolTerrain::renderFull2TU()
765 glTexGenfv(GL_S, GL_OBJECT_PLANE, tp0.mV); 698 glTexGenfv(GL_S, GL_OBJECT_PLANE, tp0.mV);
766 glTexGenfv(GL_T, GL_OBJECT_PLANE, tp1.mV); 699 glTexGenfv(GL_T, GL_OBJECT_PLANE, tp1.mV);
767 700
768 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB); 701 gGL.getTexUnit(1)->setTextureColorBlend(LLTexUnit::TBO_MULT, LLTexUnit::TBS_TEX_COLOR, LLTexUnit::TBS_VERT_COLOR);
769 glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_MODULATE); 702 gGL.getTexUnit(1)->setTextureAlphaBlend(LLTexUnit::TBO_REPLACE, LLTexUnit::TBS_PREV_ALPHA);
770 glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA_ARB, GL_REPLACE);
771
772 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB, GL_TEXTURE);
773 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB_ARB, GL_SRC_COLOR);
774 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_RGB_ARB, GL_PRIMARY_COLOR_ARB);
775 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_RGB_ARB, GL_SRC_COLOR);
776 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA_ARB, GL_PREVIOUS);
777 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_ALPHA_ARB, GL_SRC_ALPHA);
778 703
779 { 704 {
780 LLGLEnable blend(GL_BLEND); 705 LLGLEnable blend(GL_BLEND);
@@ -787,27 +712,22 @@ void LLDrawPoolTerrain::renderFull2TU()
787 // 712 //
788 // Stage 0: Generate alpha ramp for detail2/detail3 transition 713 // Stage 0: Generate alpha ramp for detail2/detail3 transition
789 // 714 //
790 LLViewerImage::bindTexture(m2DAlphaRampImagep,0); 715 gGL.getTexUnit(0)->activate();
716 LLViewerImage::bindTexture(m2DAlphaRampImagep,0);
791 // Set the texture matrix 717 // Set the texture matrix
792 glMatrixMode(GL_TEXTURE); 718 glMatrixMode(GL_TEXTURE);
793 glLoadIdentity(); 719 glLoadIdentity();
794 glTranslatef(-2.f, 0.f, 0.f); 720 glTranslatef(-2.f, 0.f, 0.f);
795 721
796 // Care about alpha only 722 // Care about alpha only
797 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB); 723 gGL.getTexUnit(0)->setTextureColorBlend(LLTexUnit::TBO_REPLACE, LLTexUnit::TBS_PREV_COLOR);
798 glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_REPLACE); 724 gGL.getTexUnit(0)->setTextureAlphaBlend(LLTexUnit::TBO_REPLACE, LLTexUnit::TBS_TEX_ALPHA);
799 glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA_ARB, GL_REPLACE);
800
801 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB, GL_PREVIOUS);
802 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB_ARB, GL_SRC_COLOR);
803 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA_ARB, GL_TEXTURE);
804 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_ALPHA_ARB, GL_SRC_ALPHA);
805 725
806 // Stage 1: Write detail3 726 // Stage 1: Write detail3
807
808 LLViewerImage::bindTexture(detail_texture3p,1); 727 LLViewerImage::bindTexture(detail_texture3p,1);
809 glActiveTextureARB(GL_TEXTURE1_ARB); 728 gGL.getTexUnit(1)->activate();
810 glEnable(GL_TEXTURE_2D); // Texture unit 1 729 glEnable(GL_TEXTURE_2D); // Texture unit 1
730
811 glEnable(GL_TEXTURE_GEN_S); 731 glEnable(GL_TEXTURE_GEN_S);
812 glEnable(GL_TEXTURE_GEN_T); 732 glEnable(GL_TEXTURE_GEN_T);
813 glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR); 733 glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR);
@@ -815,30 +735,24 @@ void LLDrawPoolTerrain::renderFull2TU()
815 glTexGenfv(GL_S, GL_OBJECT_PLANE, tp0.mV); 735 glTexGenfv(GL_S, GL_OBJECT_PLANE, tp0.mV);
816 glTexGenfv(GL_T, GL_OBJECT_PLANE, tp1.mV); 736 glTexGenfv(GL_T, GL_OBJECT_PLANE, tp1.mV);
817 737
818 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB); 738 gGL.getTexUnit(1)->setTextureColorBlend(LLTexUnit::TBO_MULT, LLTexUnit::TBS_TEX_COLOR, LLTexUnit::TBS_VERT_COLOR);
819 glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_MODULATE); 739 gGL.getTexUnit(1)->setTextureAlphaBlend(LLTexUnit::TBO_REPLACE, LLTexUnit::TBS_PREV_ALPHA);
820 glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA_ARB, GL_REPLACE);
821 740
822 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB, GL_TEXTURE); 741 gGL.getTexUnit(0)->activate();
823 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB_ARB, GL_SRC_COLOR);
824 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_RGB_ARB, GL_PRIMARY_COLOR_ARB);
825 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_RGB_ARB, GL_SRC_COLOR);
826 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA_ARB, GL_PREVIOUS);
827 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_ALPHA_ARB, GL_SRC_ALPHA);
828
829 glActiveTextureARB(GL_TEXTURE0_ARB);
830 { 742 {
831 LLGLEnable blend(GL_BLEND); 743 LLGLEnable blend(GL_BLEND);
832 drawLoop(); 744 drawLoop();
833 } 745 }
834 746
835 // Restore blend state 747 // Restore blend state
836 gGL.blendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); 748 gGL.setSceneBlendType(LLRender::BT_ALPHA);
837 749
838 // Disable multitexture 750 // Disable multitexture
751
839 LLImageGL::unbindTexture(1, GL_TEXTURE_2D); 752 LLImageGL::unbindTexture(1, GL_TEXTURE_2D);
840 glActiveTextureARB(GL_TEXTURE1_ARB); 753 gGL.getTexUnit(1)->activate();
841 glDisable(GL_TEXTURE_2D); // Texture unit 1 754 glDisable(GL_TEXTURE_2D); // Texture unit 1
755
842 glDisable(GL_TEXTURE_GEN_S); 756 glDisable(GL_TEXTURE_GEN_S);
843 glDisable(GL_TEXTURE_GEN_T); 757 glDisable(GL_TEXTURE_GEN_T);
844 glMatrixMode(GL_TEXTURE); 758 glMatrixMode(GL_TEXTURE);
@@ -848,18 +762,16 @@ void LLDrawPoolTerrain::renderFull2TU()
848 //---------------------------------------------------------------------------- 762 //----------------------------------------------------------------------------
849 // Restore Texture Unit 0 defaults 763 // Restore Texture Unit 0 defaults
850 764
851 glActiveTextureARB(GL_TEXTURE0_ARB); 765 gGL.getTexUnit(0)->activate();
852 LLImageGL::unbindTexture(0, GL_TEXTURE_2D); 766 LLImageGL::unbindTexture(0, GL_TEXTURE_2D);
853 767
854 glActiveTextureARB(GL_TEXTURE0_ARB); 768 gGL.getTexUnit(0)->activate();
855 glDisable(GL_TEXTURE_GEN_S); 769 glDisable(GL_TEXTURE_GEN_S);
856 glDisable(GL_TEXTURE_GEN_T); 770 glDisable(GL_TEXTURE_GEN_T);
857 glMatrixMode(GL_TEXTURE); 771 glMatrixMode(GL_TEXTURE);
858 glLoadIdentity(); 772 glLoadIdentity();
859 glMatrixMode(GL_MODELVIEW); 773 glMatrixMode(GL_MODELVIEW);
860 774 gGL.getTexUnit(0)->setTextureBlendType(LLTexUnit::TB_MULT);
861 // Restore non Texture Unit specific defaults
862 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
863} 775}
864 776
865 777
@@ -874,7 +786,7 @@ void LLDrawPoolTerrain::renderSimple()
874 mTexturep->addTextureStats(1024.f*1024.f); 786 mTexturep->addTextureStats(1024.f*1024.f);
875 mTexturep->bind(0); 787 mTexturep->bind(0);
876 788
877 glActiveTextureARB(GL_TEXTURE0_ARB); 789 gGL.getTexUnit(0)->activate();
878 glEnable(GL_TEXTURE_2D); // Texture unit 2 790 glEnable(GL_TEXTURE_2D); // Texture unit 2
879 791
880 LLVector3 origin_agent = mDrawFace[0]->getDrawable()->getVObj()->getRegion()->getOriginAgent(); 792 LLVector3 origin_agent = mDrawFace[0]->getDrawable()->getVObj()->getRegion()->getOriginAgent();
@@ -889,13 +801,7 @@ void LLDrawPoolTerrain::renderSimple()
889 glTexGenfv(GL_S, GL_OBJECT_PLANE, tp0.mV); 801 glTexGenfv(GL_S, GL_OBJECT_PLANE, tp0.mV);
890 glTexGenfv(GL_T, GL_OBJECT_PLANE, tp1.mV); 802 glTexGenfv(GL_T, GL_OBJECT_PLANE, tp1.mV);
891 803
892 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB); 804 gGL.getTexUnit(0)->setTextureColorBlend(LLTexUnit::TBO_MULT, LLTexUnit::TBS_TEX_COLOR, LLTexUnit::TBS_VERT_COLOR);
893 glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_MODULATE);
894
895 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB, GL_TEXTURE);
896 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB_ARB, GL_SRC_COLOR);
897 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_RGB_ARB, GL_PRIMARY_COLOR_ARB);
898 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_RGB_ARB, GL_SRC_COLOR);
899 805
900 drawLoop(); 806 drawLoop();
901 807
@@ -903,15 +809,13 @@ void LLDrawPoolTerrain::renderSimple()
903 // Restore Texture Unit 0 defaults 809 // Restore Texture Unit 0 defaults
904 810
905 LLImageGL::unbindTexture(0, GL_TEXTURE_2D); 811 LLImageGL::unbindTexture(0, GL_TEXTURE_2D);
906 glActiveTextureARB(GL_TEXTURE0_ARB); 812 gGL.getTexUnit(0)->activate();
907 glDisable(GL_TEXTURE_GEN_S); 813 glDisable(GL_TEXTURE_GEN_S);
908 glDisable(GL_TEXTURE_GEN_T); 814 glDisable(GL_TEXTURE_GEN_T);
909 glMatrixMode(GL_TEXTURE); 815 glMatrixMode(GL_TEXTURE);
910 glLoadIdentity(); 816 glLoadIdentity();
911 glMatrixMode(GL_MODELVIEW); 817 glMatrixMode(GL_MODELVIEW);
912 818 gGL.getTexUnit(0)->setTextureBlendType(LLTexUnit::TB_MULT);
913 // Restore non Texture Unit specific defaults
914 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
915} 819}
916 820
917//============================================================================ 821//============================================================================
diff --git a/linden/indra/newview/lldrawpooltree.cpp b/linden/indra/newview/lldrawpooltree.cpp
index fd0a83c..285b313 100644
--- a/linden/indra/newview/lldrawpooltree.cpp
+++ b/linden/indra/newview/lldrawpooltree.cpp
@@ -41,7 +41,7 @@
41#include "pipeline.h" 41#include "pipeline.h"
42#include "llviewercamera.h" 42#include "llviewercamera.h"
43#include "llglslshader.h" 43#include "llglslshader.h"
44#include "llglimmediate.h" 44#include "llrender.h"
45 45
46S32 LLDrawPoolTree::sDiffTex = 0; 46S32 LLDrawPoolTree::sDiffTex = 0;
47static LLGLSLShader* shader = NULL; 47static LLGLSLShader* shader = NULL;
@@ -67,7 +67,7 @@ void LLDrawPoolTree::prerender()
67void LLDrawPoolTree::beginRenderPass(S32 pass) 67void LLDrawPoolTree::beginRenderPass(S32 pass)
68{ 68{
69 LLFastTimer t(LLFastTimer::FTM_RENDER_TREES); 69 LLFastTimer t(LLFastTimer::FTM_RENDER_TREES);
70 glAlphaFunc(GL_GREATER, 0.5f); 70 gGL.setAlphaRejectSettings(LLRender::CF_GREATER, 0.5f);
71 71
72 if (LLPipeline::sUnderWaterRender) 72 if (LLPipeline::sUnderWaterRender)
73 { 73 {
@@ -106,7 +106,7 @@ void LLDrawPoolTree::render(S32 pass)
106void LLDrawPoolTree::endRenderPass(S32 pass) 106void LLDrawPoolTree::endRenderPass(S32 pass)
107{ 107{
108 LLFastTimer t(LLFastTimer::FTM_RENDER_TREES); 108 LLFastTimer t(LLFastTimer::FTM_RENDER_TREES);
109 glAlphaFunc(GL_GREATER, 0.01f); 109 gGL.setAlphaRejectSettings(LLRender::CF_DEFAULT);
110 110
111 if (gPipeline.canUseWindLightShadersOnObjects()) 111 if (gPipeline.canUseWindLightShadersOnObjects())
112 { 112 {
@@ -125,28 +125,18 @@ void LLDrawPoolTree::renderForSelect()
125 125
126 LLGLSObjectSelectAlpha gls_alpha; 126 LLGLSObjectSelectAlpha gls_alpha;
127 127
128 gGL.blendFunc(GL_ONE, GL_ZERO); 128 gGL.setSceneBlendType(LLRender::BT_REPLACE);
129 glAlphaFunc(GL_GREATER, 0.5f); 129 gGL.setAlphaRejectSettings(LLRender::CF_GREATER, 0.5f);
130 130
131 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB); 131 gGL.getTexUnit(0)->setTextureColorBlend(LLTexUnit::TBO_REPLACE, LLTexUnit::TBS_PREV_COLOR);
132 glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_REPLACE); 132 gGL.getTexUnit(0)->setTextureAlphaBlend(LLTexUnit::TBO_MULT, LLTexUnit::TBS_TEX_ALPHA, LLTexUnit::TBS_VERT_ALPHA);
133 glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA_ARB, GL_MODULATE);
134
135 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB, GL_PREVIOUS);
136 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB_ARB, GL_SRC_COLOR);
137
138 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA_ARB, GL_TEXTURE);
139 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_ALPHA_ARB, GL_SRC_ALPHA);
140
141 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_ALPHA_ARB, GL_PRIMARY_COLOR_ARB);
142 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_ALPHA_ARB, GL_SRC_ALPHA);
143 133
144 renderTree(TRUE); 134 renderTree(TRUE);
145 135
146 glAlphaFunc(GL_GREATER, 0.01f); 136 gGL.setAlphaRejectSettings(LLRender::CF_DEFAULT);
147 gGL.blendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); 137 gGL.setSceneBlendType(LLRender::BT_ALPHA);
148 138
149 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); 139 gGL.getTexUnit(0)->setTextureBlendType(LLTexUnit::TB_MULT);
150} 140}
151 141
152void LLDrawPoolTree::renderTree(BOOL selecting) 142void LLDrawPoolTree::renderTree(BOOL selecting)
diff --git a/linden/indra/newview/lldrawpoolwater.cpp b/linden/indra/newview/lldrawpoolwater.cpp
index 231d0e1..3a98235 100644
--- a/linden/indra/newview/lldrawpoolwater.cpp
+++ b/linden/indra/newview/lldrawpoolwater.cpp
@@ -37,6 +37,7 @@
37#include "lldir.h" 37#include "lldir.h"
38#include "llerror.h" 38#include "llerror.h"
39#include "m3math.h" 39#include "m3math.h"
40#include "llrender.h"
40 41
41#include "llagent.h" // for gAgent for getRegion for getWaterHeight 42#include "llagent.h" // for gAgent for getRegion for getWaterHeight
42#include "llcubemap.h" 43#include "llcubemap.h"
@@ -166,7 +167,7 @@ void LLDrawPoolWater::render(S32 pass)
166 // Set up second pass first 167 // Set up second pass first
167 mWaterImagep->addTextureStats(1024.f*1024.f); 168 mWaterImagep->addTextureStats(1024.f*1024.f);
168 mWaterImagep->bind(1); 169 mWaterImagep->bind(1);
169 glActiveTextureARB(GL_TEXTURE1_ARB); 170 gGL.getTexUnit(1)->activate();
170 171
171 glEnable(GL_TEXTURE_2D); // Texture unit 1 172 glEnable(GL_TEXTURE_2D); // Texture unit 1
172 173
@@ -198,18 +199,10 @@ void LLDrawPoolWater::render(S32 pass)
198 glTexGenfv(GL_S, GL_OBJECT_PLANE, tp0); 199 glTexGenfv(GL_S, GL_OBJECT_PLANE, tp0);
199 glTexGenfv(GL_T, GL_OBJECT_PLANE, tp1); 200 glTexGenfv(GL_T, GL_OBJECT_PLANE, tp1);
200 201
201 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB); 202 gGL.getTexUnit(1)->setTextureColorBlend(LLTexUnit::TBO_MULT, LLTexUnit::TBS_TEX_COLOR, LLTexUnit::TBS_PREV_COLOR);
202 glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_MODULATE); 203 gGL.getTexUnit(1)->setTextureAlphaBlend(LLTexUnit::TBO_REPLACE, LLTexUnit::TBS_PREV_ALPHA);
203 glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA_ARB, GL_REPLACE);
204 204
205 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB, GL_PREVIOUS_ARB); 205 gGL.getTexUnit(0)->activate();
206 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB_ARB, GL_SRC_COLOR);
207 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_RGB_ARB, GL_TEXTURE);
208 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_RGB_ARB, GL_SRC_COLOR);
209 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA_ARB, GL_PREVIOUS_ARB);
210 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_ALPHA_ARB, GL_SRC_ALPHA);
211
212 glActiveTextureARB(GL_TEXTURE0_ARB);
213 206
214 glClearStencil(1); 207 glClearStencil(1);
215 glClear(GL_STENCIL_BUFFER_BIT); 208 glClear(GL_STENCIL_BUFFER_BIT);
@@ -230,14 +223,14 @@ void LLDrawPoolWater::render(S32 pass)
230 } 223 }
231 224
232 // Now, disable texture coord generation on texture state 1 225 // Now, disable texture coord generation on texture state 1
233 glActiveTextureARB(GL_TEXTURE1_ARB); 226 gGL.getTexUnit(1)->activate();
234 glDisable(GL_TEXTURE_2D); // Texture unit 1 227 glDisable(GL_TEXTURE_2D); // Texture unit 1
235 glDisable(GL_TEXTURE_GEN_S); //texture unit 1 228 glDisable(GL_TEXTURE_GEN_S); //texture unit 1
236 glDisable(GL_TEXTURE_GEN_T); //texture unit 1 229 glDisable(GL_TEXTURE_GEN_T); //texture unit 1
237 LLImageGL::unbindTexture(1, GL_TEXTURE_2D); 230 LLImageGL::unbindTexture(1, GL_TEXTURE_2D);
238 231
239 // Disable texture coordinate and color arrays 232 // Disable texture coordinate and color arrays
240 glActiveTextureARB(GL_TEXTURE0_ARB); 233 gGL.getTexUnit(0)->activate();
241 LLImageGL::unbindTexture(0, GL_TEXTURE_2D); 234 LLImageGL::unbindTexture(0, GL_TEXTURE_2D);
242 235
243 stop_glerror(); 236 stop_glerror();
@@ -258,7 +251,7 @@ void LLDrawPoolWater::render(S32 pass)
258 glMatrixMode(GL_MODELVIEW); 251 glMatrixMode(GL_MODELVIEW);
259 LLOverrideFaceColor overrid(this, 1.f, 1.f, 1.f, 0.5f*up_dot); 252 LLOverrideFaceColor overrid(this, 1.f, 1.f, 1.f, 0.5f*up_dot);
260 253
261 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); 254 gGL.getTexUnit(0)->setTextureBlendType(LLTexUnit::TB_MULT);
262 255
263 for (std::vector<LLFace*>::iterator iter = mDrawFace.begin(); 256 for (std::vector<LLFace*>::iterator iter = mDrawFace.begin();
264 iter != mDrawFace.end(); iter++) 257 iter != mDrawFace.end(); iter++)
@@ -276,7 +269,7 @@ void LLDrawPoolWater::render(S32 pass)
276 } 269 }
277 } 270 }
278 271
279 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); 272 gGL.getTexUnit(0)->setTextureBlendType(LLTexUnit::TB_MULT);
280 273
281 if (gSky.mVOSkyp->getCubeMap()) 274 if (gSky.mVOSkyp->getCubeMap())
282 { 275 {
@@ -298,7 +291,7 @@ void LLDrawPoolWater::render(S32 pass)
298 renderReflection(refl_face); 291 renderReflection(refl_face);
299 } 292 }
300 293
301 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); 294 gGL.getTexUnit(0)->setTextureBlendType(LLTexUnit::TB_MULT);
302} 295}
303 296
304void LLDrawPoolWater::renderReflection(LLFace* face) 297void LLDrawPoolWater::renderReflection(LLFace* face)
@@ -331,7 +324,7 @@ void LLDrawPoolWater::renderReflection(LLFace* face)
331 324
332void LLDrawPoolWater::shade() 325void LLDrawPoolWater::shade()
333{ 326{
334 glColorMask(GL_TRUE,GL_TRUE,GL_TRUE,GL_TRUE); 327 gGL.setColorMask(true, true);
335 328
336 LLVOSky *voskyp = gSky.mVOSkyp; 329 LLVOSky *voskyp = gSky.mVOSkyp;
337 330
@@ -396,9 +389,9 @@ void LLDrawPoolWater::shade()
396 389
397 if (reftex > -1) 390 if (reftex > -1)
398 { 391 {
399 glActiveTextureARB(GL_TEXTURE0_ARB+reftex); 392 gGL.getTexUnit(reftex)->activate();
400 gPipeline.mWaterRef.bindTexture(); 393 gPipeline.mWaterRef.bindTexture();
401 glActiveTextureARB(GL_TEXTURE0_ARB); 394 gGL.getTexUnit(0)->activate();
402 } 395 }
403 396
404 //bind normal map 397 //bind normal map
@@ -414,14 +407,8 @@ void LLDrawPoolWater::shade()
414 407
415 mWaterNormp->addTextureStats(1024.f*1024.f); 408 mWaterNormp->addTextureStats(1024.f*1024.f);
416 mWaterNormp->bind(bumpTex); 409 mWaterNormp->bind(bumpTex);
417 if (!gSavedSettings.getBOOL("RenderWaterMipNormal")) 410 mWaterNormp->setMipFilterNearest (mWaterNormp->getMipFilterNearest(),
418 { 411 !gSavedSettings.getBOOL("RenderWaterMipNormal"));
419 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
420 }
421 else
422 {
423 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
424 }
425 412
426 S32 screentex = shader->enableTexture(LLShaderMgr::WATER_SCREENTEX); 413 S32 screentex = shader->enableTexture(LLShaderMgr::WATER_SCREENTEX);
427 stop_glerror(); 414 stop_glerror();
@@ -548,9 +535,9 @@ void LLDrawPoolWater::shade()
548 shader->disableTexture(LLShaderMgr::WATER_SCREENDEPTH); 535 shader->disableTexture(LLShaderMgr::WATER_SCREENDEPTH);
549 shader->unbind(); 536 shader->unbind();
550 537
551 glActiveTextureARB(GL_TEXTURE0_ARB); 538 gGL.getTexUnit(0)->activate();
552 glEnable(GL_TEXTURE_2D); 539 glEnable(GL_TEXTURE_2D);
553 glColorMask(GL_TRUE,GL_TRUE,GL_TRUE,GL_FALSE); 540 gGL.setColorMask(true, false);
554 541
555} 542}
556 543
diff --git a/linden/indra/newview/lldrawpoolwlsky.cpp b/linden/indra/newview/lldrawpoolwlsky.cpp
index e10cd0a..01e1af0 100644
--- a/linden/indra/newview/lldrawpoolwlsky.cpp
+++ b/linden/indra/newview/lldrawpoolwlsky.cpp
@@ -44,7 +44,7 @@
44#include "llagent.h" 44#include "llagent.h"
45#include "llviewerregion.h" 45#include "llviewerregion.h"
46#include "llface.h" 46#include "llface.h"
47#include "llglimmediate.h" 47#include "llrender.h"
48 48
49LLPointer<LLImageGL> LLDrawPoolWLSky::sCloudNoiseTexture = NULL; 49LLPointer<LLImageGL> LLDrawPoolWLSky::sCloudNoiseTexture = NULL;
50 50
@@ -153,7 +153,7 @@ void LLDrawPoolWLSky::renderStars(void) const
153{ 153{
154 LLGLSPipelineSkyBox gls_sky; 154 LLGLSPipelineSkyBox gls_sky;
155 LLGLEnable blend(GL_BLEND); 155 LLGLEnable blend(GL_BLEND);
156 gGL.blendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); 156 gGL.setSceneBlendType(LLRender::BT_ALPHA);
157 157
158 // *NOTE: have to have bound the cloud noise texture already since register 158 // *NOTE: have to have bound the cloud noise texture already since register
159 // combiners blending below requires something to be bound 159 // combiners blending below requires something to be bound
@@ -176,16 +176,8 @@ void LLDrawPoolWLSky::renderStars(void) const
176 176
177 // gl_FragColor.rgb = gl_Color.rgb; 177 // gl_FragColor.rgb = gl_Color.rgb;
178 // gl_FragColor.a = gl_Color.a * star_alpha.a; 178 // gl_FragColor.a = gl_Color.a * star_alpha.a;
179 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB); 179 gGL.getTexUnit(0)->setTextureColorBlend(LLTexUnit::TBO_REPLACE, LLTexUnit::TBS_PREV_COLOR);
180 glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_REPLACE); 180 gGL.getTexUnit(0)->setTextureAlphaBlend(LLTexUnit::TBO_MULT_X2, LLTexUnit::TBS_PREV_ALPHA, LLTexUnit::TBS_CONST_ALPHA);
181 glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA_ARB, GL_MODULATE);
182 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB, GL_PREVIOUS);
183 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB_ARB, GL_SRC_COLOR);
184 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA_ARB, GL_PREVIOUS);
185 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_ALPHA_ARB, GL_SRC_ALPHA);
186 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_ALPHA_ARB, GL_CONSTANT);
187 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_ALPHA_ARB, GL_SRC_ALPHA);
188 glTexEnvf(GL_TEXTURE_ENV, GL_ALPHA_SCALE, 2.0f);
189 glTexEnvfv(GL_TEXTURE_ENV, GL_TEXTURE_ENV_COLOR, star_alpha.mV); 181 glTexEnvfv(GL_TEXTURE_ENV, GL_TEXTURE_ENV_COLOR, star_alpha.mV);
190 182
191 gSky.mVOWLSkyp->drawStars(); 183 gSky.mVOWLSkyp->drawStars();
@@ -193,8 +185,7 @@ void LLDrawPoolWLSky::renderStars(void) const
193 glPointSize(1.f); 185 glPointSize(1.f);
194 186
195 // and disable the combiner states 187 // and disable the combiner states
196 glTexEnvf(GL_TEXTURE_ENV, GL_ALPHA_SCALE, 1.0f); 188 gGL.getTexUnit(0)->setTextureBlendType(LLTexUnit::TB_MULT);
197 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
198} 189}
199 190
200void LLDrawPoolWLSky::renderSkyClouds(F32 camHeightLocal) const 191void LLDrawPoolWLSky::renderSkyClouds(F32 camHeightLocal) const
@@ -208,7 +199,7 @@ void LLDrawPoolWLSky::renderSkyClouds(F32 camHeightLocal) const
208 199
209 LLGLEnable blend(GL_BLEND); 200 LLGLEnable blend(GL_BLEND);
210 LLGLSBlendFunc blendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); 201 LLGLSBlendFunc blendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
211 glAlphaFunc(GL_GREATER, 0.01f); 202 gGL.setAlphaRejectSettings(LLRender::CF_DEFAULT);
212 203
213 sCloudNoiseTexture->bind(); 204 sCloudNoiseTexture->bind();
214 shader->bind(); 205 shader->bind();
diff --git a/linden/indra/newview/lldynamictexture.cpp b/linden/indra/newview/lldynamictexture.cpp
index ce7f1ec..f77187d 100644
--- a/linden/indra/newview/lldynamictexture.cpp
+++ b/linden/indra/newview/lldynamictexture.cpp
@@ -40,7 +40,7 @@
40#include "llviewerimage.h" 40#include "llviewerimage.h"
41#include "llvertexbuffer.h" 41#include "llvertexbuffer.h"
42#include "llviewerdisplay.h" 42#include "llviewerdisplay.h"
43#include "llglimmediate.h" 43#include "llrender.h"
44 44
45void render_ui_and_swap_if_needed(); 45void render_ui_and_swap_if_needed();
46 46
diff --git a/linden/indra/newview/llface.cpp b/linden/indra/newview/llface.cpp
index 4a5e532..3e0c5b2 100644
--- a/linden/indra/newview/llface.cpp
+++ b/linden/indra/newview/llface.cpp
@@ -42,7 +42,7 @@
42 42
43#include "lldrawpoolbump.h" 43#include "lldrawpoolbump.h"
44#include "llgl.h" 44#include "llgl.h"
45#include "llglimmediate.h" 45#include "llrender.h"
46#include "lllightconstants.h" 46#include "lllightconstants.h"
47#include "llsky.h" 47#include "llsky.h"
48#include "llviewercamera.h" 48#include "llviewercamera.h"
@@ -468,6 +468,7 @@ void LLFace::renderSelectedUV(const S32 offset, const S32 count)
468 if (pass == 0) 468 if (pass == 0)
469 { 469 {
470 LLViewerImage::bindTexture(red_blue_imagep); 470 LLViewerImage::bindTexture(red_blue_imagep);
471 red_blue_imagep->setMipFilterNearest (TRUE, TRUE);
471 } 472 }
472 else // pass == 1 473 else // pass == 1
473 { 474 {
@@ -476,9 +477,8 @@ void LLFace::renderSelectedUV(const S32 offset, const S32 count)
476 glMatrixMode(GL_TEXTURE); 477 glMatrixMode(GL_TEXTURE);
477 glPushMatrix(); 478 glPushMatrix();
478 glScalef(256.f, 256.f, 1.f); 479 glScalef(256.f, 256.f, 1.f);
480 green_imagep->setMipFilterNearest (TRUE, TRUE);
479 } 481 }
480 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
481 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
482 482
483 483
484 if (!isState(GLOBAL)) 484 if (!isState(GLOBAL))
diff --git a/linden/indra/newview/llface.h b/linden/indra/newview/llface.h
index f04d221..533851c 100644
--- a/linden/indra/newview/llface.h
+++ b/linden/indra/newview/llface.h
@@ -34,6 +34,7 @@
34 34
35#include "llstrider.h" 35#include "llstrider.h"
36 36
37#include "llrender.h"
37#include "v2math.h" 38#include "v2math.h"
38#include "v3math.h" 39#include "v3math.h"
39#include "v4math.h" 40#include "v4math.h"
diff --git a/linden/indra/newview/llfasttimerview.cpp b/linden/indra/newview/llfasttimerview.cpp
index 047016f..d594dc5 100644
--- a/linden/indra/newview/llfasttimerview.cpp
+++ b/linden/indra/newview/llfasttimerview.cpp
@@ -37,7 +37,7 @@
37#include "llrect.h" 37#include "llrect.h"
38#include "llerror.h" 38#include "llerror.h"
39#include "llgl.h" 39#include "llgl.h"
40#include "llglimmediate.h" 40#include "llrender.h"
41#include "llmath.h" 41#include "llmath.h"
42#include "llfontgl.h" 42#include "llfontgl.h"
43 43
diff --git a/linden/indra/newview/llfeaturemanager.cpp b/linden/indra/newview/llfeaturemanager.cpp
index 9f79c18..69e7bcc 100644
--- a/linden/indra/newview/llfeaturemanager.cpp
+++ b/linden/indra/newview/llfeaturemanager.cpp
@@ -95,7 +95,7 @@ void LLFeatureList::addFeature(const char *name, const BOOL available, const F32
95{ 95{
96 if (mFeatures.count(name)) 96 if (mFeatures.count(name))
97 { 97 {
98 llwarns << "LLFeatureList::Attempting to add preexisting feature " << name << llendl; 98 LL_WARNS("RenderInit") << "LLFeatureList::Attempting to add preexisting feature " << name << LL_ENDL;
99 } 99 }
100 100
101 LLFeatureInfo fi(name, available, level); 101 LLFeatureInfo fi(name, available, level);
@@ -109,7 +109,7 @@ BOOL LLFeatureList::isFeatureAvailable(const char *name)
109 return mFeatures[name].mAvailable; 109 return mFeatures[name].mAvailable;
110 } 110 }
111 111
112 llwarns << "Feature " << name << " not on feature list!" << llendl; 112 LL_WARNS("RenderInit") << "Feature " << name << " not on feature list!" << LL_ENDL;
113 113
114 // changing this to TRUE so you have to explicitly disable 114 // changing this to TRUE so you have to explicitly disable
115 // something for it to be disabled 115 // something for it to be disabled
@@ -123,7 +123,7 @@ F32 LLFeatureList::getRecommendedValue(const char *name)
123 return mFeatures[name].mRecommendedLevel; 123 return mFeatures[name].mRecommendedLevel;
124 } 124 }
125 125
126 llwarns << "Feature " << name << " not on feature list or not available!" << llendl; 126 LL_WARNS("RenderInit") << "Feature " << name << " not on feature list or not available!" << LL_ENDL;
127 return 0; 127 return 0;
128} 128}
129 129
@@ -146,46 +146,46 @@ BOOL LLFeatureList::maskList(LLFeatureList &mask)
146 // 146 //
147 if (!mFeatures.count(mask_fi.mName)) 147 if (!mFeatures.count(mask_fi.mName))
148 { 148 {
149 llwarns << "Feature " << mask_fi.mName << " in mask not in top level!" << llendl; 149 LL_WARNS("RenderInit") << "Feature " << mask_fi.mName << " in mask not in top level!" << LL_ENDL;
150 continue; 150 continue;
151 } 151 }
152 152
153 LLFeatureInfo &cur_fi = mFeatures[mask_fi.mName]; 153 LLFeatureInfo &cur_fi = mFeatures[mask_fi.mName];
154 if (mask_fi.mAvailable && !cur_fi.mAvailable) 154 if (mask_fi.mAvailable && !cur_fi.mAvailable)
155 { 155 {
156 llwarns << "Mask attempting to reenabling disabled feature, ignoring " << cur_fi.mName << llendl; 156 LL_WARNS("RenderInit") << "Mask attempting to reenabling disabled feature, ignoring " << cur_fi.mName << LL_ENDL;
157 continue; 157 continue;
158 } 158 }
159 cur_fi.mAvailable = mask_fi.mAvailable; 159 cur_fi.mAvailable = mask_fi.mAvailable;
160 cur_fi.mRecommendedLevel = llmin(cur_fi.mRecommendedLevel, mask_fi.mRecommendedLevel); 160 cur_fi.mRecommendedLevel = llmin(cur_fi.mRecommendedLevel, mask_fi.mRecommendedLevel);
161#ifndef LL_RELEASE_FOR_DOWNLOAD 161 LL_DEBUGS("RenderInit") << "Feature mask " << mask.mName
162 llinfos << "Feature mask " << mask.mName
163 << " Feature " << mask_fi.mName 162 << " Feature " << mask_fi.mName
164 << " Mask: " << mask_fi.mRecommendedLevel 163 << " Mask: " << mask_fi.mRecommendedLevel
165 << " Now: " << cur_fi.mRecommendedLevel << llendl; 164 << " Now: " << cur_fi.mRecommendedLevel << LL_ENDL;
166#endif
167 } 165 }
168 166
169#if 0 && !LL_RELEASE_FOR_DOWNLOAD 167 LL_DEBUGS("RenderInit") << "After applying mask " << mask.mName << std::endl;
170 llinfos << "After applying mask " << mask.mName << llendl; 168 // Will conditionally call dump only if the above message will be logged, thanks
171 dump(); 169 // to it being wrapped by the LL_DEBUGS and LL_ENDL macros.
172#endif 170 dump();
171 LL_CONT << LL_ENDL;
172
173 return TRUE; 173 return TRUE;
174} 174}
175 175
176void LLFeatureList::dump() 176void LLFeatureList::dump()
177{ 177{
178 llinfos << "Feature list: " << mName << llendl; 178 LL_DEBUGS("RenderInit") << "Feature list: " << mName << LL_ENDL;
179 llinfos << "--------------" << llendl; 179 LL_DEBUGS("RenderInit") << "--------------" << LL_ENDL;
180 180
181 LLFeatureInfo fi; 181 LLFeatureInfo fi;
182 feature_map_t::iterator feature_it; 182 feature_map_t::iterator feature_it;
183 for (feature_it = mFeatures.begin(); feature_it != mFeatures.end(); ++feature_it) 183 for (feature_it = mFeatures.begin(); feature_it != mFeatures.end(); ++feature_it)
184 { 184 {
185 fi = feature_it->second; 185 fi = feature_it->second;
186 llinfos << fi.mName << "\t\t" << fi.mAvailable << ":" << fi.mRecommendedLevel << llendl; 186 LL_DEBUGS("RenderInit") << fi.mName << "\t\t" << fi.mAvailable << ":" << fi.mRecommendedLevel << LL_ENDL;
187 } 187 }
188 llinfos << llendl; 188 LL_DEBUGS("RenderInit") << LL_ENDL;
189} 189}
190 190
191LLFeatureList *LLFeatureManager::findMask(const char *name) 191LLFeatureList *LLFeatureManager::findMask(const char *name)
@@ -203,10 +203,10 @@ BOOL LLFeatureManager::maskFeatures(const char *name)
203 LLFeatureList *maskp = findMask(name); 203 LLFeatureList *maskp = findMask(name);
204 if (!maskp) 204 if (!maskp)
205 { 205 {
206// llwarns << "Unknown feature mask " << name << llendl; 206 LL_DEBUGS("RenderInit") << "Unknown feature mask " << name << LL_ENDL;
207 return FALSE; 207 return FALSE;
208 } 208 }
209 llinfos << "Applying Feature Mask: " << name << llendl; 209 LL_DEBUGS("RenderInit") << "Applying Feature Mask: " << name << LL_ENDL;
210 return maskList(*maskp); 210 return maskList(*maskp);
211} 211}
212 212
@@ -236,7 +236,7 @@ BOOL LLFeatureManager::loadFeatureTables()
236 236
237 if (!file) 237 if (!file)
238 { 238 {
239 llwarns << "Unable to open feature table!" << llendl; 239 LL_WARNS("RenderInit") << "Unable to open feature table!" << LL_ENDL;
240 return FALSE; 240 return FALSE;
241 } 241 }
242 242
@@ -245,7 +245,7 @@ BOOL LLFeatureManager::loadFeatureTables()
245 file >> version; 245 file >> version;
246 if (strcmp(name, "version")) 246 if (strcmp(name, "version"))
247 { 247 {
248 llwarns << data_path << " does not appear to be a valid feature table!" << llendl; 248 LL_WARNS("RenderInit") << data_path << " does not appear to be a valid feature table!" << LL_ENDL;
249 return FALSE; 249 return FALSE;
250 } 250 }
251 251
@@ -285,7 +285,7 @@ BOOL LLFeatureManager::loadFeatureTables()
285 file >> name; 285 file >> name;
286 if (mMaskList.count(name)) 286 if (mMaskList.count(name))
287 { 287 {
288 llerrs << "Overriding mask " << name << ", this is invalid!" << llendl; 288 LL_ERRS("RenderInit") << "Overriding mask " << name << ", this is invalid!" << LL_ENDL;
289 } 289 }
290 290
291 flp = new LLFeatureList(name); 291 flp = new LLFeatureList(name);
@@ -295,7 +295,7 @@ BOOL LLFeatureManager::loadFeatureTables()
295 { 295 {
296 if (!flp) 296 if (!flp)
297 { 297 {
298 llerrs << "Specified parameter before <list> keyword!" << llendl; 298 LL_ERRS("RenderInit") << "Specified parameter before <list> keyword!" << LL_ENDL;
299 } 299 }
300 S32 available; 300 S32 available;
301 F32 recommended; 301 F32 recommended;
@@ -327,7 +327,7 @@ void LLFeatureManager::loadGPUClass()
327 327
328 if (!file) 328 if (!file)
329 { 329 {
330 llwarns << "Unable to open GPU table: " << data_path << "!" << llendl; 330 LL_WARNS("RenderInit") << "Unable to open GPU table: " << data_path << "!" << LL_ENDL;
331 return; 331 return;
332 } 332 }
333 333
@@ -398,7 +398,7 @@ void LLFeatureManager::loadGPUClass()
398 { 398 {
399 // if we found it, stop! 399 // if we found it, stop!
400 file.close(); 400 file.close();
401 llinfos << "GPU is " << label << llendl; 401 LL_INFOS("RenderInit") << "GPU is " << label << llendl;
402 mGPUString = label; 402 mGPUString = label;
403 mGPUClass = (EGPUClass) strtol(cls.c_str(), NULL, 10); 403 mGPUClass = (EGPUClass) strtol(cls.c_str(), NULL, 10);
404 mGPUSupported = (BOOL) strtol(supported.c_str(), NULL, 10); 404 mGPUSupported = (BOOL) strtol(supported.c_str(), NULL, 10);
@@ -408,7 +408,7 @@ void LLFeatureManager::loadGPUClass()
408 } 408 }
409 file.close(); 409 file.close();
410 410
411 llwarns << "Couldn't match GPU to a class: " << gGLManager.getRawGLString() << llendl; 411 LL_WARNS("RenderInit") << "Couldn't match GPU to a class: " << gGLManager.getRawGLString() << LL_ENDL;
412} 412}
413 413
414void LLFeatureManager::cleanupFeatureTables() 414void LLFeatureManager::cleanupFeatureTables()
@@ -546,7 +546,7 @@ void LLFeatureManager::applyBaseMasks()
546 LLFeatureList* maskp = findMask("all"); 546 LLFeatureList* maskp = findMask("all");
547 if(maskp == NULL) 547 if(maskp == NULL)
548 { 548 {
549 llwarns << "AHH! No \"all\" in feature table!" << llendl; 549 LL_WARNS("RenderInit") << "AHH! No \"all\" in feature table!" << LL_ENDL;
550 return; 550 return;
551 } 551 }
552 552
@@ -563,12 +563,12 @@ void LLFeatureManager::applyBaseMasks()
563 "Class3" 563 "Class3"
564 }; 564 };
565 565
566 llinfos << "Setting GPU Class to " << class_table[mGPUClass] << llendl; 566 LL_INFOS("RenderInit") << "Setting GPU Class to " << class_table[mGPUClass] << LL_ENDL;
567 maskFeatures(class_table[mGPUClass]); 567 maskFeatures(class_table[mGPUClass]);
568 } 568 }
569 else 569 else
570 { 570 {
571 llinfos << "Setting GPU Class to Unknown" << llendl; 571 LL_INFOS("RenderInit") << "Setting GPU Class to Unknown" << LL_ENDL;
572 maskFeatures("Unknown"); 572 maskFeatures("Unknown");
573 } 573 }
574 574
diff --git a/linden/indra/newview/llfeaturemanager.h b/linden/indra/newview/llfeaturemanager.h
index b45046b..79ea958 100644
--- a/linden/indra/newview/llfeaturemanager.h
+++ b/linden/indra/newview/llfeaturemanager.h
@@ -76,7 +76,7 @@ public:
76 void setFeatureAvailable(const char *name, const BOOL available); 76 void setFeatureAvailable(const char *name, const BOOL available);
77 void setRecommendedLevel(const char *name, const F32 level); 77 void setRecommendedLevel(const char *name, const F32 level);
78 78
79 BOOL loadFeatureList(FILE *fp); 79 BOOL loadFeatureList(LLFILE *fp);
80 80
81 BOOL maskList(LLFeatureList &mask); 81 BOOL maskList(LLFeatureList &mask);
82 82
diff --git a/linden/indra/newview/llfloateranimpreview.cpp b/linden/indra/newview/llfloateranimpreview.cpp
index 890cfd2..82729e9 100644
--- a/linden/indra/newview/llfloateranimpreview.cpp
+++ b/linden/indra/newview/llfloateranimpreview.cpp
@@ -46,7 +46,7 @@
46#include "llcombobox.h" 46#include "llcombobox.h"
47#include "lldrawable.h" 47#include "lldrawable.h"
48#include "lldrawpoolavatar.h" 48#include "lldrawpoolavatar.h"
49#include "llglimmediate.h" 49#include "llrender.h"
50#include "llface.h" 50#include "llface.h"
51#include "llkeyframemotion.h" 51#include "llkeyframemotion.h"
52#include "lllineeditor.h" 52#include "lllineeditor.h"
@@ -1135,6 +1135,7 @@ BOOL LLPreviewAnimation::render()
1135 if (avatarp->mDrawable.notNull()) 1135 if (avatarp->mDrawable.notNull())
1136 { 1136 {
1137 LLDrawPoolAvatar *avatarPoolp = (LLDrawPoolAvatar *)avatarp->mDrawable->getFace(0)->getPool(); 1137 LLDrawPoolAvatar *avatarPoolp = (LLDrawPoolAvatar *)avatarp->mDrawable->getFace(0)->getPool();
1138 avatarp->dirtyMesh();
1138 avatarPoolp->renderAvatars(avatarp); // renders only one avatar 1139 avatarPoolp->renderAvatars(avatarp); // renders only one avatar
1139 } 1140 }
1140 1141
diff --git a/linden/indra/newview/llfloaterauction.cpp b/linden/indra/newview/llfloaterauction.cpp
index 7affff6..4a40abb 100644
--- a/linden/indra/newview/llfloaterauction.cpp
+++ b/linden/indra/newview/llfloaterauction.cpp
@@ -53,7 +53,7 @@
53#include "llviewerdisplay.h" 53#include "llviewerdisplay.h"
54#include "llviewercontrol.h" 54#include "llviewercontrol.h"
55#include "llui.h" 55#include "llui.h"
56#include "llglimmediate.h" 56#include "llrender.h"
57 57
58///---------------------------------------------------------------------------- 58///----------------------------------------------------------------------------
59/// Local function declarations, constants, enums, and typedefs 59/// Local function declarations, constants, enums, and typedefs
@@ -186,7 +186,10 @@ void LLFloaterAuction::onClickSnapshot(void* data)
186 self->mTransactionID.generate(); 186 self->mTransactionID.generate();
187 self->mImageID = self->mTransactionID.makeAssetID(gAgent.getSecureSessionID()); 187 self->mImageID = self->mTransactionID.makeAssetID(gAgent.getSecureSessionID());
188 188
189 gViewerWindow->playSnapshotAnimAndSound(); 189 if(!gSavedSettings.getBOOL("QuietSnapshotsToDisk"))
190 {
191 gViewerWindow->playSnapshotAnimAndSound();
192 }
190 llinfos << "Writing TGA..." << llendl; 193 llinfos << "Writing TGA..." << llendl;
191 194
192 LLPointer<LLImageTGA> tga = new LLImageTGA; 195 LLPointer<LLImageTGA> tga = new LLImageTGA;
diff --git a/linden/indra/newview/llfloaterbuyland.cpp b/linden/indra/newview/llfloaterbuyland.cpp
index ee78eaa..b596339 100644
--- a/linden/indra/newview/llfloaterbuyland.cpp
+++ b/linden/indra/newview/llfloaterbuyland.cpp
@@ -62,7 +62,7 @@
62#include "llwindow.h" 62#include "llwindow.h"
63#include "llworld.h" 63#include "llworld.h"
64#include "llxmlrpctransaction.h" 64#include "llxmlrpctransaction.h"
65#include "llappviewer.h" 65#include "llviewernetwork.h"
66#include "roles_constants.h" 66#include "roles_constants.h"
67 67
68// NOTE: This is duplicated in lldatamoney.cpp ... 68// NOTE: This is duplicated in lldatamoney.cpp ...
@@ -841,7 +841,7 @@ void LLFloaterBuyLandUI::startTransaction(TransactionType type,
841 static std::string transaction_uri; 841 static std::string transaction_uri;
842 if (transaction_uri.empty()) 842 if (transaction_uri.empty())
843 { 843 {
844 transaction_uri = LLAppViewer::instance()->getHelperURI() + "landtool.php"; 844 transaction_uri = LLViewerLogin::getInstance()->getHelperURI() + "landtool.php";
845 } 845 }
846 846
847 const char* method; 847 const char* method;
@@ -1363,3 +1363,4 @@ void LLFloaterBuyLandUI::onClickErrorWeb(void* data)
1363} 1363}
1364 1364
1365 1365
1366
diff --git a/linden/indra/newview/llfloaterchat.cpp b/linden/indra/newview/llfloaterchat.cpp
index 0394cd1..d05b231 100644
--- a/linden/indra/newview/llfloaterchat.cpp
+++ b/linden/indra/newview/llfloaterchat.cpp
@@ -72,6 +72,7 @@
72#include "lltexteditor.h" 72#include "lltexteditor.h"
73#include "llfloaterhtml.h" 73#include "llfloaterhtml.h"
74#include "llweb.h" 74#include "llweb.h"
75#include "llstylemap.h"
75 76
76// Used for LCD display 77// Used for LCD display
77extern void AddNewIMToLCD(const LLString &newLine); 78extern void AddNewIMToLCD(const LLString &newLine);
@@ -188,14 +189,26 @@ void LLFloaterChat::updateConsoleVisibility()
188 || (getHost() && getHost()->isMinimized() )); // are we hosted in a minimized floater? 189 || (getHost() && getHost()->isMinimized() )); // are we hosted in a minimized floater?
189} 190}
190 191
191void add_timestamped_line(LLViewerTextEditor* edit, const LLString& line, const LLColor4& color) 192void add_timestamped_line(LLViewerTextEditor* edit, const LLChat &chat, const LLColor4& color)
192{ 193{
194 LLString line = chat.mText;
193 bool prepend_newline = true; 195 bool prepend_newline = true;
194 if (gSavedSettings.getBOOL("ChatShowTimestamps")) 196 if (gSavedSettings.getBOOL("ChatShowTimestamps"))
195 { 197 {
196 edit->appendTime(prepend_newline); 198 edit->appendTime(prepend_newline);
197 prepend_newline = false; 199 prepend_newline = false;
198 } 200 }
201
202 // If the msg is not from an agent (not yourself though),
203 // extract out the sender name and replace it with the hotlinked name.
204 if (chat.mSourceType == CHAT_SOURCE_AGENT &&
205 chat.mFromID != LLUUID::null &&
206 (line.length() > chat.mFromName.length() && line.find(chat.mFromName,0) == 0))
207 {
208 line = line.substr(chat.mFromName.length());
209 const LLStyleSP &sourceStyle = LLStyleMap::instance().lookup(chat.mFromID);
210 edit->appendStyledText(chat.mFromName, false, false, &sourceStyle);
211 }
199 edit->appendColoredText(line, false, prepend_newline, color); 212 edit->appendColoredText(line, false, prepend_newline, color);
200} 213}
201 214
@@ -243,14 +256,14 @@ void LLFloaterChat::addChatHistory(const LLChat& chat, bool log_to_file)
243 256
244 if (!chat.mMuted) 257 if (!chat.mMuted)
245 { 258 {
246 add_timestamped_line(history_editor, chat.mText, color); 259 add_timestamped_line(history_editor, chat, color);
247 add_timestamped_line(history_editor_with_mute, chat.mText, color); 260 add_timestamped_line(history_editor_with_mute, chat, color);
248 } 261 }
249 else 262 else
250 { 263 {
251 // desaturate muted chat 264 // desaturate muted chat
252 LLColor4 muted_color = lerp(color, LLColor4::grey, 0.5f); 265 LLColor4 muted_color = lerp(color, LLColor4::grey, 0.5f);
253 add_timestamped_line(history_editor_with_mute, chat.mText, color); 266 add_timestamped_line(history_editor_with_mute, chat, color);
254 } 267 }
255 268
256 // add objects as transient speakers that can be muted 269 // add objects as transient speakers that can be muted
diff --git a/linden/indra/newview/llfloatercolorpicker.cpp b/linden/indra/newview/llfloatercolorpicker.cpp
index e72cb1a..7bf9da3 100644
--- a/linden/indra/newview/llfloatercolorpicker.cpp
+++ b/linden/indra/newview/llfloatercolorpicker.cpp
@@ -39,7 +39,7 @@
39#include "llfontgl.h" 39#include "llfontgl.h"
40#include "llsys.h" 40#include "llsys.h"
41#include "llgl.h" 41#include "llgl.h"
42#include "llglimmediate.h" 42#include "llrender.h"
43#include "v3dmath.h" 43#include "v3dmath.h"
44#include "lldir.h" 44#include "lldir.h"
45#include "llui.h" 45#include "llui.h"
diff --git a/linden/indra/newview/llfloaterdirectory.cpp b/linden/indra/newview/llfloaterdirectory.cpp
index 42a3bae..f1ee946 100644
--- a/linden/indra/newview/llfloaterdirectory.cpp
+++ b/linden/indra/newview/llfloaterdirectory.cpp
@@ -79,7 +79,6 @@ LLFloaterDirectory::LLFloaterDirectory(const std::string& name)
79 mFindAllPanel = NULL; 79 mFindAllPanel = NULL;
80 mClassifiedPanel = NULL; 80 mClassifiedPanel = NULL;
81 mEventsPanel = NULL; 81 mEventsPanel = NULL;
82 mPopularPanel = NULL;
83 mLandPanel = NULL; 82 mLandPanel = NULL;
84 83
85 mPanelAvatarp = NULL; 84 mPanelAvatarp = NULL;
@@ -96,12 +95,11 @@ LLFloaterDirectory::LLFloaterDirectory(const std::string& name)
96 factory_map["find_all_panel"] = LLCallbackMap(createFindAll, this); 95 factory_map["find_all_panel"] = LLCallbackMap(createFindAll, this);
97 factory_map["classified_panel"] = LLCallbackMap(createClassified, this); 96 factory_map["classified_panel"] = LLCallbackMap(createClassified, this);
98 factory_map["events_panel"] = LLCallbackMap(createEvents, this); 97 factory_map["events_panel"] = LLCallbackMap(createEvents, this);
99 factory_map["popular_panel"] = LLCallbackMap(createPopular, this); 98 factory_map["showcase_panel"] = LLCallbackMap(createShowcase, this);
100 factory_map["places_panel"] = LLCallbackMap(createPlaces, this); 99 factory_map["places_panel"] = LLCallbackMap(createPlaces, this);
101 factory_map["land_sales_panel"] = LLCallbackMap(createLand, this); 100 factory_map["land_sales_panel"] = LLCallbackMap(createLand, this);
102 factory_map["people_panel"] = LLCallbackMap(createPeople, this); 101 factory_map["people_panel"] = LLCallbackMap(createPeople, this);
103 factory_map["groups_panel"] = LLCallbackMap(createGroups, this); 102 factory_map["groups_panel"] = LLCallbackMap(createGroups, this);
104 factory_map["find_all_old_panel"] = LLCallbackMap(createFindAllOld, this);
105 103
106 factory_map["classified_details_panel"] = LLCallbackMap(createClassifiedDetail, this); 104 factory_map["classified_details_panel"] = LLCallbackMap(createClassifiedDetail, this);
107 factory_map["event_details_panel"] = LLCallbackMap(createEventDetail, this); 105 factory_map["event_details_panel"] = LLCallbackMap(createEventDetail, this);
@@ -120,15 +118,14 @@ LLFloaterDirectory::LLFloaterDirectory(const std::string& name)
120 mPanelAvatarp->selectTab(0); 118 mPanelAvatarp->selectTab(0);
121 } 119 }
122 120
123 childSetTabChangeCallback("Directory Tabs", "find_all_panel", onTabChangedFindAll, this); 121 childSetTabChangeCallback("Directory Tabs", "find_all_panel", onTabChanged, this);
124 childSetTabChangeCallback("Directory Tabs", "classified_panel", onTabChanged, this); 122 childSetTabChangeCallback("Directory Tabs", "classified_panel", onTabChanged, this);
125 childSetTabChangeCallback("Directory Tabs", "events_panel", onTabChanged, this); 123 childSetTabChangeCallback("Directory Tabs", "events_panel", onTabChanged, this);
126 childSetTabChangeCallback("Directory Tabs", "popular_panel", onTabChanged, this); 124 childSetTabChangeCallback("Directory Tabs", "showcase_panel", onTabChanged, this);
127 childSetTabChangeCallback("Directory Tabs", "places_panel", onTabChanged, this); 125 childSetTabChangeCallback("Directory Tabs", "places_panel", onTabChanged, this);
128 childSetTabChangeCallback("Directory Tabs", "land_sales_panel", onTabChanged, this); 126 childSetTabChangeCallback("Directory Tabs", "land_sales_panel", onTabChanged, this);
129 childSetTabChangeCallback("Directory Tabs", "people_panel", onTabChanged, this); 127 childSetTabChangeCallback("Directory Tabs", "people_panel", onTabChanged, this);
130 childSetTabChangeCallback("Directory Tabs", "groups_panel", onTabChanged, this); 128 childSetTabChangeCallback("Directory Tabs", "groups_panel", onTabChanged, this);
131 childSetTabChangeCallback("Directory Tabs", "find_all_old_panel", onTabChanged, this);
132} 129}
133 130
134LLFloaterDirectory::~LLFloaterDirectory() 131LLFloaterDirectory::~LLFloaterDirectory()
@@ -175,11 +172,10 @@ void* LLFloaterDirectory::createEvents(void* userdata)
175} 172}
176 173
177// static 174// static
178void* LLFloaterDirectory::createPopular(void* userdata) 175void* LLFloaterDirectory::createShowcase(void* userdata)
179{ 176{
180 LLFloaterDirectory *self = (LLFloaterDirectory*)userdata; 177 LLFloaterDirectory *self = (LLFloaterDirectory*)userdata;
181 self->mPopularPanel = new LLPanelDirPopular("popular_panel", self); 178 return new LLPanelDirPopular("showcase_panel", self);
182 return self->mPopularPanel;
183} 179}
184 180
185// static 181// static
@@ -209,14 +205,7 @@ void* LLFloaterDirectory::createPeople(void* userdata)
209void* LLFloaterDirectory::createGroups(void* userdata) 205void* LLFloaterDirectory::createGroups(void* userdata)
210{ 206{
211 LLFloaterDirectory *self = (LLFloaterDirectory*)userdata; 207 LLFloaterDirectory *self = (LLFloaterDirectory*)userdata;
212 return new LLPanelDirGroups("groups_panel", self); 208 return new LLPanelDirGroups("people_groups", self);
213}
214
215// static
216void *LLFloaterDirectory::createFindAllOld(void* userdata)
217{
218 LLFloaterDirectory *self = (LLFloaterDirectory*)userdata;
219 return new LLPanelDirFindAllOld("find_all_old_panel", self);
220} 209}
221 210
222// static 211// static
@@ -339,17 +328,6 @@ void LLFloaterDirectory::showEvents(S32 event_id)
339} 328}
340 329
341// static 330// static
342void LLFloaterDirectory::showPopular(const LLUUID& parcel_id)
343{
344 showPanel("popular_panel");
345
346 if (sInstance->mPopularPanel)
347 {
348 sInstance->mPopularPanel->selectByUUID(parcel_id);
349 }
350}
351
352// static
353void LLFloaterDirectory::showLandForSale(const LLUUID& parcel_id) 331void LLFloaterDirectory::showLandForSale(const LLUUID& parcel_id)
354{ 332{
355 showPanel("land_sales_panel"); 333 showPanel("land_sales_panel");
@@ -498,17 +476,6 @@ void LLFloaterDirectory::onTabChanged(void* data, bool from_click)
498 } 476 }
499} 477}
500 478
501// static
502void LLFloaterDirectory::onTabChangedFindAll(void* data, bool from_click)
503{
504 LLFloaterDirectory* self = (LLFloaterDirectory*)data;
505 if (!self) return;
506
507 self->hideAllDetailPanels();
508 LLPanelDirFindAllInterface::focus(self->mFindAllPanel);
509 onTabChanged(data, from_click);
510}
511
512void LLFloaterDirectory::hideAllDetailPanels() 479void LLFloaterDirectory::hideAllDetailPanels()
513{ 480{
514 if (mPanelAvatarp) mPanelAvatarp->setVisible(FALSE); 481 if (mPanelAvatarp) mPanelAvatarp->setVisible(FALSE);
diff --git a/linden/indra/newview/llfloaterdirectory.h b/linden/indra/newview/llfloaterdirectory.h
index 7aa956a..6915aea 100644
--- a/linden/indra/newview/llfloaterdirectory.h
+++ b/linden/indra/newview/llfloaterdirectory.h
@@ -73,7 +73,6 @@ public:
73 static void showFindAll(const std::string& search_text); 73 static void showFindAll(const std::string& search_text);
74 static void showClassified(const LLUUID& classified_id); 74 static void showClassified(const LLUUID& classified_id);
75 static void showEvents(S32 event_id); 75 static void showEvents(S32 event_id);
76 static void showPopular(const LLUUID& parcel_id);
77 static void showLandForSale(const LLUUID& parcel_id); 76 static void showLandForSale(const LLUUID& parcel_id);
78 static void showGroups(); 77 static void showGroups();
79 static void refreshGroup(const LLUUID& group_id); 78 static void refreshGroup(const LLUUID& group_id);
@@ -82,7 +81,6 @@ public:
82 static void toggleEvents(void*); 81 static void toggleEvents(void*);
83 static void toggleFind(void*); 82 static void toggleFind(void*);
84 static void onTabChanged(void*, bool); 83 static void onTabChanged(void*, bool);
85 static void onTabChangedFindAll(void*, bool);
86 84
87 void hideAllDetailPanels(); 85 void hideAllDetailPanels();
88 86
@@ -97,18 +95,16 @@ private:
97 LLPanelDirFindAll* mFindAllPanel; 95 LLPanelDirFindAll* mFindAllPanel;
98 LLPanelDirClassified* mClassifiedPanel; 96 LLPanelDirClassified* mClassifiedPanel;
99 LLPanelDirEvents* mEventsPanel; 97 LLPanelDirEvents* mEventsPanel;
100 LLPanelDirPopular* mPopularPanel;
101 LLPanelDirLand* mLandPanel; 98 LLPanelDirLand* mLandPanel;
102 99
103 static void* createFindAll(void* userdata); 100 static void* createFindAll(void* userdata);
104 static void* createClassified(void* userdata); 101 static void* createClassified(void* userdata);
105 static void* createEvents(void* userdata); 102 static void* createEvents(void* userdata);
106 static void* createPopular(void* userdata); 103 static void* createShowcase(void* userdata);
107 static void* createPlaces(void* userdata); 104 static void* createPlaces(void* userdata);
108 static void* createLand(void* userdata); 105 static void* createLand(void* userdata);
109 static void* createPeople(void* userdata); 106 static void* createPeople(void* userdata);
110 static void* createGroups(void* userdata); 107 static void* createGroups(void* userdata);
111 static void* createFindAllOld(void* userdata);
112 108
113 static void* createClassifiedDetail(void* userdata); 109 static void* createClassifiedDetail(void* userdata);
114 static void* createAvatarDetail(void* userdata); 110 static void* createAvatarDetail(void* userdata);
diff --git a/linden/indra/newview/llfloatergroupinfo.cpp b/linden/indra/newview/llfloatergroupinfo.cpp
index 1c303b9..c657988 100644
--- a/linden/indra/newview/llfloatergroupinfo.cpp
+++ b/linden/indra/newview/llfloatergroupinfo.cpp
@@ -37,7 +37,7 @@
37 37
38#include "llagent.h" 38#include "llagent.h"
39#include "llcommandhandler.h" 39#include "llcommandhandler.h"
40#include "llcommandhandler.h" 40#include "llfloaterchatterbox.h"
41#include "llpanelgroup.h" 41#include "llpanelgroup.h"
42#include "llviewermessage.h" // for inventory_offer_callback 42#include "llviewermessage.h" // for inventory_offer_callback
43//#include "llviewerwindow.h" 43//#include "llviewerwindow.h"
@@ -59,11 +59,35 @@ public:
59 LLGroupHandler() : LLCommandHandler("group", false) { } 59 LLGroupHandler() : LLCommandHandler("group", false) { }
60 bool handle(const LLSD& tokens, const LLSD& queryMap) 60 bool handle(const LLSD& tokens, const LLSD& queryMap)
61 { 61 {
62 if (tokens.size() < 1)
63 {
64 return false;
65 }
66
67 if (tokens[0].asString() == "create")
68 {
69 LLFloaterGroupInfo::showCreateGroup(NULL);
70 return true;
71 }
72
62 if (tokens.size() < 2) 73 if (tokens.size() < 2)
63 { 74 {
64 return false; 75 return false;
65 } 76 }
66 77
78 if (tokens[0].asString() == "list")
79 {
80 if (tokens[1].asString() == "show")
81 {
82 // CP_TODO: get the value we pass in via the XUI name
83 // of the tab instead of using a literal like this
84 LLFloaterMyFriends::showInstance( 1 );
85
86 return true;
87 }
88 return false;
89 }
90
67 LLUUID group_id; 91 LLUUID group_id;
68 if (!group_id.set(tokens[0], FALSE)) 92 if (!group_id.set(tokens[0], FALSE))
69 { 93 {
diff --git a/linden/indra/newview/llfloatergroups.cpp b/linden/indra/newview/llfloatergroups.cpp
index 7f32b24..c9ccf1a 100644
--- a/linden/indra/newview/llfloatergroups.cpp
+++ b/linden/indra/newview/llfloatergroups.cpp
@@ -466,7 +466,7 @@ void init_group_list(LLScrollListCtrl* ctrl, const LLUUID& highlight_id, U64 pow
466 LLSD element; 466 LLSD element;
467 element["id"] = LLUUID::null; 467 element["id"] = LLUUID::null;
468 element["columns"][0]["column"] = "name"; 468 element["columns"][0]["column"] = "name";
469 element["columns"][0]["value"] = "none"; 469 element["columns"][0]["value"] = "none"; // *TODO: Translate
470 element["columns"][0]["font"] = "SANSSERIF"; 470 element["columns"][0]["font"] = "SANSSERIF";
471 element["columns"][0]["font-style"] = style; 471 element["columns"][0]["font-style"] = style;
472 472
diff --git a/linden/indra/newview/llfloaterimagepreview.cpp b/linden/indra/newview/llfloaterimagepreview.cpp
index a228587..ccd7737 100644
--- a/linden/indra/newview/llfloaterimagepreview.cpp
+++ b/linden/indra/newview/llfloaterimagepreview.cpp
@@ -43,7 +43,7 @@
43#include "llcombobox.h" 43#include "llcombobox.h"
44#include "lldrawable.h" 44#include "lldrawable.h"
45#include "lldrawpoolavatar.h" 45#include "lldrawpoolavatar.h"
46#include "llglimmediate.h" 46#include "llrender.h"
47#include "llface.h" 47#include "llface.h"
48#include "lltextbox.h" 48#include "lltextbox.h"
49#include "lltoolmgr.h" 49#include "lltoolmgr.h"
diff --git a/linden/indra/newview/llfloaterproperties.cpp b/linden/indra/newview/llfloaterproperties.cpp
index 0d2cd5f..48232cb 100644
--- a/linden/indra/newview/llfloaterproperties.cpp
+++ b/linden/indra/newview/llfloaterproperties.cpp
@@ -65,11 +65,21 @@
65// helper class to watch the inventory. 65// helper class to watch the inventory.
66//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 66//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
67 67
68class LLPropertiesObserver : public LLInventoryObserver, public LLSingleton<LLPropertiesObserver> 68// Ugh. This can't be a singleton because it needs to remove itself
69// from the inventory observer list when destroyed, which could
70// happen after gInventory has already been destroyed if a singleton.
71// Instead, do our own ref counting and create / destroy it as needed
72class LLPropertiesObserver : public LLInventoryObserver
69{ 73{
70public: 74public:
71 LLPropertiesObserver() {} 75 LLPropertiesObserver()
72 virtual ~LLPropertiesObserver() {} 76 {
77 gInventory.addObserver(this);
78 }
79 virtual ~LLPropertiesObserver()
80 {
81 gInventory.removeObserver(this);
82 }
73 virtual void changed(U32 mask); 83 virtual void changed(U32 mask);
74}; 84};
75 85
@@ -88,7 +98,10 @@ void LLPropertiesObserver::changed(U32 mask)
88/// Class LLFloaterProperties 98/// Class LLFloaterProperties
89///---------------------------------------------------------------------------- 99///----------------------------------------------------------------------------
90 100
101// static
91LLFloaterProperties::instance_map LLFloaterProperties::sInstances; 102LLFloaterProperties::instance_map LLFloaterProperties::sInstances;
103LLPropertiesObserver* LLFloaterProperties::sPropertiesObserver = NULL;
104S32 LLFloaterProperties::sPropertiesObserverCount = 0;
92 105
93// static 106// static
94LLFloaterProperties* LLFloaterProperties::find(const LLUUID& item_id, 107LLFloaterProperties* LLFloaterProperties::find(const LLUUID& item_id,
@@ -145,12 +158,12 @@ LLFloaterProperties::LLFloaterProperties(const std::string& name, const LLRect&
145{ 158{
146 LLUICtrlFactory::getInstance()->buildFloater(this,"floater_inventory_item_properties.xml"); 159 LLUICtrlFactory::getInstance()->buildFloater(this,"floater_inventory_item_properties.xml");
147 160
148 // hack to make sure these floaters are observing the inventory. 161 if (!sPropertiesObserver)
149 if(!gInventory.containsObserver(LLPropertiesObserver::getInstance()))
150 { 162 {
151 // Note: this is where gPropertiesObserver used to be constructed. 163 sPropertiesObserver = new LLPropertiesObserver;
152 gInventory.addObserver(LLPropertiesObserver::getInstance());
153 } 164 }
165 sPropertiesObserverCount++;
166
154 // add the object to the static structure 167 // add the object to the static structure
155 LLUUID key = mItemID ^ mObjectID; 168 LLUUID key = mItemID ^ mObjectID;
156 sInstances.insert(instance_map::value_type(key, this)); 169 sInstances.insert(instance_map::value_type(key, this));
@@ -193,6 +206,12 @@ LLFloaterProperties::~LLFloaterProperties()
193 { 206 {
194 sInstances.erase(it); 207 sInstances.erase(it);
195 } 208 }
209 sPropertiesObserverCount--;
210 if (!sPropertiesObserverCount)
211 {
212 delete sPropertiesObserver;
213 sPropertiesObserver = NULL;
214 }
196} 215}
197 216
198void LLFloaterProperties::refresh() 217void LLFloaterProperties::refresh()
@@ -422,7 +441,7 @@ void LLFloaterProperties::refreshFromItem(LLInventoryItem* item)
422 441
423 perm_string = "G"; 442 perm_string = "G";
424 perm_string += overwrite_group ? "*: " : ": "; 443 perm_string += overwrite_group ? "*: " : ": ";
425 perm_string += perm_string += mask_to_string(group_mask); 444 perm_string += mask_to_string(group_mask);
426 childSetText("GroupMaskDebug",perm_string); 445 childSetText("GroupMaskDebug",perm_string);
427 childSetVisible("GroupMaskDebug",TRUE); 446 childSetVisible("GroupMaskDebug",TRUE);
428 447
diff --git a/linden/indra/newview/llfloaterproperties.h b/linden/indra/newview/llfloaterproperties.h
index d4461fd..a459616 100644
--- a/linden/indra/newview/llfloaterproperties.h
+++ b/linden/indra/newview/llfloaterproperties.h
@@ -47,6 +47,8 @@ class LLLineEditor;
47class LLRadioGroup; 47class LLRadioGroup;
48class LLTextBox; 48class LLTextBox;
49 49
50class LLPropertiesObserver;
51
50class LLFloaterProperties : public LLFloater 52class LLFloaterProperties : public LLFloater
51{ 53{
52public: 54public:
@@ -94,6 +96,8 @@ protected:
94 96
95 typedef std::map<LLUUID, LLFloaterProperties*, lluuid_less> instance_map; 97 typedef std::map<LLUUID, LLFloaterProperties*, lluuid_less> instance_map;
96 static instance_map sInstances; 98 static instance_map sInstances;
99 static LLPropertiesObserver* sPropertiesObserver;
100 static S32 sPropertiesObserverCount;
97}; 101};
98 102
99class LLMultiProperties : public LLMultiFloater 103class LLMultiProperties : public LLMultiFloater
diff --git a/linden/indra/newview/llfloaterregioninfo.cpp b/linden/indra/newview/llfloaterregioninfo.cpp
index 12834b3..7b3b8e2 100644
--- a/linden/indra/newview/llfloaterregioninfo.cpp
+++ b/linden/indra/newview/llfloaterregioninfo.cpp
@@ -80,6 +80,8 @@
80const S32 TERRAIN_TEXTURE_COUNT = 4; 80const S32 TERRAIN_TEXTURE_COUNT = 4;
81const S32 CORNER_COUNT = 4; 81const S32 CORNER_COUNT = 4;
82 82
83extern LLString gLastVersionChannel;
84
83 85
84///---------------------------------------------------------------------------- 86///----------------------------------------------------------------------------
85/// Local class declaration 87/// Local class declaration
@@ -317,6 +319,7 @@ void LLFloaterRegionInfo::processRegionInfo(LLMessageSystem* msg)
317 // GENERAL PANEL 319 // GENERAL PANEL
318 panel = tab->getChild<LLPanel>("General"); 320 panel = tab->getChild<LLPanel>("General");
319 panel->childSetValue("region_text", LLSD(sim_name)); 321 panel->childSetValue("region_text", LLSD(sim_name));
322 panel->childSetValue("version_channel_text", gLastVersionChannel);
320 323
321 panel->childSetValue("block_terraform_check", (region_flags & REGION_FLAGS_BLOCK_TERRAFORM) ? TRUE : FALSE ); 324 panel->childSetValue("block_terraform_check", (region_flags & REGION_FLAGS_BLOCK_TERRAFORM) ? TRUE : FALSE );
322 panel->childSetValue("block_fly_check", (region_flags & REGION_FLAGS_BLOCK_FLY) ? TRUE : FALSE ); 325 panel->childSetValue("block_fly_check", (region_flags & REGION_FLAGS_BLOCK_FLY) ? TRUE : FALSE );
diff --git a/linden/indra/newview/llfloaterreporter.cpp b/linden/indra/newview/llfloaterreporter.cpp
index 0c1b9ee..9c43f35 100644
--- a/linden/indra/newview/llfloaterreporter.cpp
+++ b/linden/indra/newview/llfloaterreporter.cpp
@@ -81,7 +81,7 @@
81#include "llselectmgr.h" 81#include "llselectmgr.h"
82#include "llviewerbuild.h" 82#include "llviewerbuild.h"
83#include "lluictrlfactory.h" 83#include "lluictrlfactory.h"
84#include "llappviewer.h" 84#include "llviewernetwork.h"
85 85
86#include "llassetuploadresponders.h" 86#include "llassetuploadresponders.h"
87 87
@@ -656,7 +656,7 @@ LLSD LLFloaterReporter::gatherReport()
656 mCopyrightWarningSeen = FALSE; 656 mCopyrightWarningSeen = FALSE;
657 657
658 std::ostringstream summary; 658 std::ostringstream summary;
659 if (!LLAppViewer::instance()->isInProductionGrid()) 659 if (!LLViewerLogin::getInstance()->isInProductionGrid())
660 { 660 {
661 summary << "Preview "; 661 summary << "Preview ";
662 } 662 }
diff --git a/linden/indra/newview/llfloaterreporter.h b/linden/indra/newview/llfloaterreporter.h
index 9696b34..5e8f735 100644
--- a/linden/indra/newview/llfloaterreporter.h
+++ b/linden/indra/newview/llfloaterreporter.h
@@ -49,6 +49,8 @@ struct LLResourceData;
49// these flags are used to label info requests to the server 49// these flags are used to label info requests to the server
50const U32 BUG_REPORT_REQUEST = 0x01 << 0; 50const U32 BUG_REPORT_REQUEST = 0x01 << 0;
51const U32 COMPLAINT_REPORT_REQUEST = 0x01 << 1; 51const U32 COMPLAINT_REPORT_REQUEST = 0x01 << 1;
52const U32 OBJECT_PAY_REQUEST = 0x01 << 2;
53
52 54
53// ************************************************************ 55// ************************************************************
54// THESE ENUMS ARE IN THE DATABASE!!! 56// THESE ENUMS ARE IN THE DATABASE!!!
diff --git a/linden/indra/newview/llfloatersnapshot.cpp b/linden/indra/newview/llfloatersnapshot.cpp
index c36c54d..f3ad4a7 100644
--- a/linden/indra/newview/llfloatersnapshot.cpp
+++ b/linden/indra/newview/llfloatersnapshot.cpp
@@ -36,7 +36,7 @@
36#include "llfontgl.h" 36#include "llfontgl.h"
37#include "llsys.h" 37#include "llsys.h"
38#include "llgl.h" 38#include "llgl.h"
39#include "llglimmediate.h" 39#include "llrender.h"
40#include "v3dmath.h" 40#include "v3dmath.h"
41#include "llmath.h" 41#include "llmath.h"
42#include "lldir.h" 42#include "lldir.h"
@@ -183,6 +183,7 @@ protected:
183 LLQuaternion mCameraRot; 183 LLQuaternion mCameraRot;
184 BOOL mSnapshotActive; 184 BOOL mSnapshotActive;
185 LLViewerWindow::ESnapshotType mSnapshotBufferType; 185 LLViewerWindow::ESnapshotType mSnapshotBufferType;
186 bool mSnapshotSoundPlayed;
186 187
187public: 188public:
188 static std::set<LLSnapshotLivePreview*> sList; 189 static std::set<LLSnapshotLivePreview*> sList;
@@ -208,7 +209,8 @@ LLSnapshotLivePreview::LLSnapshotLivePreview (const LLRect& rect) :
208 mCameraPos(LLViewerCamera::getInstance()->getOrigin()), 209 mCameraPos(LLViewerCamera::getInstance()->getOrigin()),
209 mCameraRot(LLViewerCamera::getInstance()->getQuaternion()), 210 mCameraRot(LLViewerCamera::getInstance()->getQuaternion()),
210 mSnapshotActive(FALSE), 211 mSnapshotActive(FALSE),
211 mSnapshotBufferType(LLViewerWindow::SNAPSHOT_TYPE_COLOR) 212 mSnapshotBufferType(LLViewerWindow::SNAPSHOT_TYPE_COLOR),
213 mSnapshotSoundPlayed(false)
212{ 214{
213 mSnapshotDelayTimer.setTimerExpirySec(0.0f); 215 mSnapshotDelayTimer.setTimerExpirySec(0.0f);
214 mSnapshotDelayTimer.start(); 216 mSnapshotDelayTimer.start();
@@ -764,6 +766,19 @@ void LLSnapshotLivePreview::onIdle( void* snapshot_preview )
764 { 766 {
765 previewp->mRawImageEncoded->resize(previewp->mRawImage->getWidth(), previewp->mRawImage->getHeight(), previewp->mRawImage->getComponents()); 767 previewp->mRawImageEncoded->resize(previewp->mRawImage->getWidth(), previewp->mRawImage->getHeight(), previewp->mRawImage->getComponents());
766 768
769 if (!gSavedSettings.getBOOL("QuietSnapshotsToDisk"))
770 {
771 // Always play the sound once, on window open.
772 // Don't keep playing if automatic
773 // updates are enabled. It's too invasive. JC
774 if (!previewp->mSnapshotSoundPlayed
775 || !gSavedSettings.getBOOL("AutoSnapshot") )
776 {
777 gViewerWindow->playSnapshotAnimAndSound();
778 previewp->mSnapshotSoundPlayed = true;
779 }
780 }
781
767 if (previewp->getSnapshotType() == SNAPSHOT_POSTCARD) 782 if (previewp->getSnapshotType() == SNAPSHOT_POSTCARD)
768 { 783 {
769 // *FIX: just resize and reuse existing jpeg? 784 // *FIX: just resize and reuse existing jpeg?
@@ -923,7 +938,9 @@ BOOL LLSnapshotLivePreview::saveLocal()
923class LLFloaterSnapshot::Impl 938class LLFloaterSnapshot::Impl
924{ 939{
925public: 940public:
926 Impl() : mLastToolset(NULL) 941 Impl()
942 : mAvatarPauseHandles(),
943 mLastToolset(NULL)
927 { 944 {
928 } 945 }
929 ~Impl() 946 ~Impl()
@@ -1054,7 +1071,13 @@ void LLFloaterSnapshot::Impl::updateLayout(LLFloaterSnapshot* floaterp)
1054 previewp->setSize(gViewerWindow->getWindowDisplayWidth(), gViewerWindow->getWindowDisplayHeight()); 1071 previewp->setSize(gViewerWindow->getWindowDisplayWidth(), gViewerWindow->getWindowDisplayHeight());
1055 } 1072 }
1056 1073
1057 if (floaterp->childGetValue("freeze_frame_check").asBoolean()) 1074 bool use_freeze_frame = floaterp->childGetValue("freeze_frame_check").asBoolean();
1075 // For now, auto-snapshot only works in freeze frame mode.
1076 // This can be changed in the future by taking the FreezeTime check
1077 // out of the onIdle() camera movement detection. JC
1078 floaterp->childSetEnabled("auto_snapshot_check", use_freeze_frame);
1079
1080 if (use_freeze_frame)
1058 { 1081 {
1059 // stop all mouse events at fullscreen preview layer 1082 // stop all mouse events at fullscreen preview layer
1060 floaterp->getParent()->setMouseOpaque(TRUE); 1083 floaterp->getParent()->setMouseOpaque(TRUE);
@@ -1089,6 +1112,9 @@ void LLFloaterSnapshot::Impl::updateLayout(LLFloaterSnapshot* floaterp)
1089 } 1112 }
1090 else // turning off freeze frame mode 1113 else // turning off freeze frame mode
1091 { 1114 {
1115 // Force off auto-snapshot, see comment above about onIdle. JC
1116 gSavedSettings.setBOOL("AutoSnapshot", FALSE);
1117
1092 floaterp->getParent()->setMouseOpaque(FALSE); 1118 floaterp->getParent()->setMouseOpaque(FALSE);
1093 floaterp->reshape(floaterp->getRect().getWidth(), floaterp->getUIWinHeightLong() + delta_height); 1119 floaterp->reshape(floaterp->getRect().getWidth(), floaterp->getUIWinHeightLong() + delta_height);
1094 if (previewp) 1120 if (previewp)
@@ -1287,12 +1313,6 @@ void LLFloaterSnapshot::Impl::onClickKeep(void* data)
1287 if (gSavedSettings.getBOOL("CloseSnapshotOnKeep")) 1313 if (gSavedSettings.getBOOL("CloseSnapshotOnKeep"))
1288 { 1314 {
1289 view->close(); 1315 view->close();
1290 // only plays sound and anim when keeping a snapshot, and closing the snapshot UI,
1291 // and only if the save succeeded (i.e. was not canceled)
1292 if (succeeded)
1293 {
1294 gViewerWindow->playSnapshotAnimAndSound();
1295 }
1296 } 1316 }
1297 else 1317 else
1298 { 1318 {
@@ -1674,13 +1694,13 @@ void LLFloaterSnapshot::Impl::resetSnapshotSizeOnUI(LLFloaterSnapshot *view, S32
1674 LLSpinCtrl *sctrl = view->getChild<LLSpinCtrl>("snapshot_width") ; 1694 LLSpinCtrl *sctrl = view->getChild<LLSpinCtrl>("snapshot_width") ;
1675 if(sctrl) 1695 if(sctrl)
1676 { 1696 {
1677 sctrl->setValue(width) ; 1697 sctrl->forceSetValue(width) ;
1678 } 1698 }
1679 1699
1680 sctrl = view->getChild<LLSpinCtrl>("snapshot_height") ; 1700 sctrl = view->getChild<LLSpinCtrl>("snapshot_height") ;
1681 if(sctrl) 1701 if(sctrl)
1682 { 1702 {
1683 sctrl->setValue(height) ; 1703 sctrl->forceSetValue(height) ;
1684 } 1704 }
1685 1705
1686 gSavedSettings.setS32("LastSnapshotWidth", width); 1706 gSavedSettings.setS32("LastSnapshotWidth", width);
@@ -1707,8 +1727,30 @@ void LLFloaterSnapshot::Impl::onCommitCustomResolution(LLUICtrl *ctrl, void* dat
1707 1727
1708 if (w != curw || h != curh) 1728 if (w != curw || h != curh)
1709 { 1729 {
1730 BOOL update_ = FALSE ;
1731 //if to upload a snapshot, process spinner input in a special way.
1732 if(LLSnapshotLivePreview::SNAPSHOT_TEXTURE == gSavedSettings.getS32("LastSnapshotType"))
1733 {
1734 S32 spinner_increment = (S32)((LLSpinCtrl*)ctrl)->getIncrement() ;
1735 S32 dw = w - curw ;
1736 S32 dh = h - curh ;
1737 dw = (dw == spinner_increment) ? 1 : ((dw == -spinner_increment) ? -1 : 0) ;
1738 dh = (dh == spinner_increment) ? 1 : ((dh == -spinner_increment) ? -1 : 0) ;
1739
1740 if(dw)
1741 {
1742 w = (dw > 0) ? curw << dw : curw >> -dw ;
1743 update_ = TRUE ;
1744 }
1745 if(dh)
1746 {
1747 h = (dh > 0) ? curh << dh : curh >> -dh ;
1748 update_ = TRUE ;
1749 }
1750 }
1751
1710 previewp->setMaxImageSize((S32)((LLSpinCtrl *)ctrl)->getMaxValue()) ; 1752 previewp->setMaxImageSize((S32)((LLSpinCtrl *)ctrl)->getMaxValue()) ;
1711 if(checkImageSize(previewp, w, h, w != curw, previewp->getMaxImageSize())) 1753 if(checkImageSize(previewp, w, h, w != curw, previewp->getMaxImageSize()) || update_)
1712 { 1754 {
1713 resetSnapshotSizeOnUI(view, w, h) ; 1755 resetSnapshotSizeOnUI(view, w, h) ;
1714 } 1756 }
diff --git a/linden/indra/newview/llfloatertools.cpp b/linden/indra/newview/llfloatertools.cpp
index 97a8db3..97150e3 100644
--- a/linden/indra/newview/llfloatertools.cpp
+++ b/linden/indra/newview/llfloatertools.cpp
@@ -194,12 +194,16 @@ BOOL LLFloaterTools::postBuild()
194 mBtnLand = getChild<LLButton>("button land" ); 194 mBtnLand = getChild<LLButton>("button land" );
195 childSetAction("button land",LLFloaterTools::setEditTool, (void*)LLToolSelectLand::getInstance()); 195 childSetAction("button land",LLFloaterTools::setEditTool, (void*)LLToolSelectLand::getInstance());
196 mTextStatus = getChild<LLTextBox>("text status"); 196 mTextStatus = getChild<LLTextBox>("text status");
197 mRadioZoom = getChild<LLCheckBoxCtrl>("radio zoom"); 197
198 childSetCommitCallback("slider zoom",commit_slider_zoom,this); 198 childSetCommitCallback("slider zoom",commit_slider_zoom,this);
199
200 mRadioZoom = getChild<LLCheckBoxCtrl>("radio zoom");
201 childSetCommitCallback("radio zoom",commit_radio_zoom,this);
199 mRadioOrbit = getChild<LLCheckBoxCtrl>("radio orbit"); 202 mRadioOrbit = getChild<LLCheckBoxCtrl>("radio orbit");
200 childSetCommitCallback("radio orbit",commit_radio_orbit,this); 203 childSetCommitCallback("radio orbit",commit_radio_orbit,this);
201 mRadioPan = getChild<LLCheckBoxCtrl>("radio pan"); 204 mRadioPan = getChild<LLCheckBoxCtrl>("radio pan");
202 childSetCommitCallback("radio pan",commit_radio_pan,this); 205 childSetCommitCallback("radio pan",commit_radio_pan,this);
206
203 mRadioMove = getChild<LLCheckBoxCtrl>("radio move"); 207 mRadioMove = getChild<LLCheckBoxCtrl>("radio move");
204 childSetCommitCallback("radio move",click_popup_grab_drag,this); 208 childSetCommitCallback("radio move",click_popup_grab_drag,this);
205 mRadioLift = getChild<LLCheckBoxCtrl>("radio lift"); 209 mRadioLift = getChild<LLCheckBoxCtrl>("radio lift");
@@ -492,6 +496,7 @@ void LLFloaterTools::dirty()
492// floater is closed. 496// floater is closed.
493void LLFloaterTools::resetToolState() 497void LLFloaterTools::resetToolState()
494{ 498{
499 gCameraBtnZoom = TRUE;
495 gCameraBtnOrbit = FALSE; 500 gCameraBtnOrbit = FALSE;
496 gCameraBtnPan = FALSE; 501 gCameraBtnPan = FALSE;
497 502
@@ -524,7 +529,8 @@ void LLFloaterTools::updatePopup(LLCoordGL center, MASK mask)
524 mRadioOrbit ->setVisible( focus_visible ); 529 mRadioOrbit ->setVisible( focus_visible );
525 mRadioPan ->setVisible( focus_visible ); 530 mRadioPan ->setVisible( focus_visible );
526 childSetVisible("slider zoom", focus_visible); 531 childSetVisible("slider zoom", focus_visible);
527 532 childSetEnabled("slider zoom", gCameraBtnZoom);
533
528 mRadioZoom ->set( !gCameraBtnOrbit && 534 mRadioZoom ->set( !gCameraBtnOrbit &&
529 !gCameraBtnPan && 535 !gCameraBtnPan &&
530 !(mask == MASK_ORBIT) && 536 !(mask == MASK_ORBIT) &&
@@ -867,18 +873,21 @@ void click_popup_grab_spin(LLUICtrl*, void*)
867 873
868void commit_radio_zoom(LLUICtrl *, void*) 874void commit_radio_zoom(LLUICtrl *, void*)
869{ 875{
876 gCameraBtnZoom = TRUE;
870 gCameraBtnOrbit = FALSE; 877 gCameraBtnOrbit = FALSE;
871 gCameraBtnPan = FALSE; 878 gCameraBtnPan = FALSE;
872} 879}
873 880
874void commit_radio_orbit(LLUICtrl *, void*) 881void commit_radio_orbit(LLUICtrl *, void*)
875{ 882{
883 gCameraBtnZoom = FALSE;
876 gCameraBtnOrbit = TRUE; 884 gCameraBtnOrbit = TRUE;
877 gCameraBtnPan = FALSE; 885 gCameraBtnPan = FALSE;
878} 886}
879 887
880void commit_radio_pan(LLUICtrl *, void*) 888void commit_radio_pan(LLUICtrl *, void*)
881{ 889{
890 gCameraBtnZoom = FALSE;
882 gCameraBtnOrbit = FALSE; 891 gCameraBtnOrbit = FALSE;
883 gCameraBtnPan = TRUE; 892 gCameraBtnPan = TRUE;
884} 893}
diff --git a/linden/indra/newview/llfolderview.cpp b/linden/indra/newview/llfolderview.cpp
index 49ca5e4..b543e31 100644
--- a/linden/indra/newview/llfolderview.cpp
+++ b/linden/indra/newview/llfolderview.cpp
@@ -40,7 +40,7 @@
40#include "llfocusmgr.h" 40#include "llfocusmgr.h"
41#include "llfontgl.h" 41#include "llfontgl.h"
42#include "llgl.h" 42#include "llgl.h"
43#include "llglimmediate.h" 43#include "llrender.h"
44#include "llinventory.h" 44#include "llinventory.h"
45 45
46#include "llcallbacklist.h" 46#include "llcallbacklist.h"
@@ -3144,6 +3144,10 @@ void LLFolderView::draw()
3144 { 3144 {
3145 closeAutoOpenedFolders(); 3145 closeAutoOpenedFolders();
3146 } 3146 }
3147 if(gViewerWindow->hasKeyboardFocus(this) && !getVisible())
3148 {
3149 gViewerWindow->setKeyboardFocus( NULL );
3150 }
3147 3151
3148 // while dragging, update selection rendering to reflect single/multi drag status 3152 // while dragging, update selection rendering to reflect single/multi drag status
3149 if (LLToolDragAndDrop::getInstance()->hasMouseCapture()) 3153 if (LLToolDragAndDrop::getInstance()->hasMouseCapture())
diff --git a/linden/indra/newview/llframestats.cpp b/linden/indra/newview/llframestats.cpp
index f67c3b8..c7519c9 100644
--- a/linden/indra/newview/llframestats.cpp
+++ b/linden/indra/newview/llframestats.cpp
@@ -184,7 +184,7 @@ void LLFrameStats::dump()
184 184
185 char filename[LL_MAX_PATH]; /* Flawfinder: ignore */ 185 char filename[LL_MAX_PATH]; /* Flawfinder: ignore */
186 snprintf(filename, LL_MAX_PATH, "%s", gDirUtilp->getExpandedFilename(LL_PATH_LOGS, file_with_num).c_str()); /* Flawfinder: ignore */ 186 snprintf(filename, LL_MAX_PATH, "%s", gDirUtilp->getExpandedFilename(LL_PATH_LOGS, file_with_num).c_str()); /* Flawfinder: ignore */
187 FILE *fp = LLFile::fopen(filename, "w"); /* Flawfinder: ignore */ 187 LLFILE *fp = LLFile::fopen(filename, "w"); /* Flawfinder: ignore */
188 if (!fp) 188 if (!fp)
189 { 189 {
190 llinfos << "Couldn't open file for dumping frame stats!" << llendl; 190 llinfos << "Couldn't open file for dumping frame stats!" << llendl;
diff --git a/linden/indra/newview/llgivemoney.cpp b/linden/indra/newview/llgivemoney.cpp
index 41b1c1e..016acd5 100644
--- a/linden/indra/newview/llgivemoney.cpp
+++ b/linden/indra/newview/llgivemoney.cpp
@@ -40,6 +40,8 @@
40#include "llresmgr.h" 40#include "llresmgr.h"
41#include "lltextbox.h" 41#include "lltextbox.h"
42#include "lllineeditor.h" 42#include "lllineeditor.h"
43#include "llmutelist.h"
44#include "llfloaterreporter.h"
43#include "llviewerobject.h" 45#include "llviewerobject.h"
44#include "llviewerobjectlist.h" 46#include "llviewerobjectlist.h"
45#include "llviewerregion.h" 47#include "llviewerregion.h"
@@ -474,6 +476,17 @@ void LLFloaterPay::give(S32 amount)
474 if(dest_object->isAvatar()) tx_type = TRANS_GIFT; 476 if(dest_object->isAvatar()) tx_type = TRANS_GIFT;
475 mCallback(mTargetUUID, region, amount, FALSE, tx_type, object_name); 477 mCallback(mTargetUUID, region, amount, FALSE, tx_type, object_name);
476 mObjectSelection = NULL; 478 mObjectSelection = NULL;
479
480 // request the object owner in order to check if the owner needs to be unmuted
481 LLMessageSystem* msg = gMessageSystem;
482 msg->newMessageFast(_PREHASH_RequestObjectPropertiesFamily);
483 msg->nextBlockFast(_PREHASH_AgentData);
484 msg->addUUIDFast(_PREHASH_AgentID, gAgent.getID());
485 msg->addUUIDFast(_PREHASH_SessionID, gAgent.getSessionID());
486 msg->nextBlockFast(_PREHASH_ObjectData);
487 msg->addU32Fast(_PREHASH_RequestFlags, OBJECT_PAY_REQUEST );
488 msg->addUUIDFast(_PREHASH_ObjectID, mTargetUUID);
489 msg->sendReliable( region->getHost() );
477 } 490 }
478 } 491 }
479 } 492 }
@@ -481,6 +494,9 @@ void LLFloaterPay::give(S32 amount)
481 { 494 {
482 // just transfer the L$ 495 // just transfer the L$
483 mCallback(mTargetUUID, gAgent.getRegion(), amount, mTargetIsGroup, TRANS_GIFT, LLString::null); 496 mCallback(mTargetUUID, gAgent.getRegion(), amount, mTargetIsGroup, TRANS_GIFT, LLString::null);
497
498 // check if the payee needs to be unmuted
499 LLMuteList::getInstance()->autoRemove(mTargetUUID, LLMuteList::AR_MONEY);
484 } 500 }
485 } 501 }
486} 502}
diff --git a/linden/indra/newview/llglsandbox.cpp b/linden/indra/newview/llglsandbox.cpp
index 4ea38aa..30c76c9 100644
--- a/linden/indra/newview/llglsandbox.cpp
+++ b/linden/indra/newview/llglsandbox.cpp
@@ -39,7 +39,7 @@
39#include "llviewercontrol.h" 39#include "llviewercontrol.h"
40 40
41#include "llgl.h" 41#include "llgl.h"
42#include "llglimmediate.h" 42#include "llrender.h"
43#include "llglheaders.h" 43#include "llglheaders.h"
44#include "llparcel.h" 44#include "llparcel.h"
45#include "llui.h" 45#include "llui.h"
diff --git a/linden/indra/newview/llglslshader.cpp b/linden/indra/newview/llglslshader.cpp
index 5c8f156..afbafde 100644
--- a/linden/indra/newview/llglslshader.cpp
+++ b/linden/indra/newview/llglslshader.cpp
@@ -34,6 +34,7 @@
34#include "llfeaturemanager.h" 34#include "llfeaturemanager.h"
35#include "llglslshader.h" 35#include "llglslshader.h"
36 36
37#include "llfile.h"
37#include "llviewerwindow.h" 38#include "llviewerwindow.h"
38#include "llviewercontrol.h" 39#include "llviewercontrol.h"
39#include "pipeline.h" 40#include "pipeline.h"
@@ -42,16 +43,16 @@
42#include "llwaterparammanager.h" 43#include "llwaterparammanager.h"
43#include "llsky.h" 44#include "llsky.h"
44#include "llvosky.h" 45#include "llvosky.h"
45#include "llglimmediate.h" 46#include "llrender.h"
46 47
47#if LL_DARWIN 48#if LL_DARWIN
48#include "OpenGL/OpenGL.h" 49#include "OpenGL/OpenGL.h"
49#endif 50#endif
50 51
51#ifdef LL_RELEASE_FOR_DOWNLOAD 52#ifdef LL_RELEASE_FOR_DOWNLOAD
52#define UNIFORM_ERRS llwarns 53#define UNIFORM_ERRS LL_WARNS_ONCE("Shader")
53#else 54#else
54#define UNIFORM_ERRS llerrs 55#define UNIFORM_ERRS LL_ERRS("Shader")
55#endif 56#endif
56 57
57// Lots of STL stuff in here, using namespace std to keep things more readable 58// Lots of STL stuff in here, using namespace std to keep things more readable
@@ -60,20 +61,6 @@ using std::pair;
60using std::make_pair; 61using std::make_pair;
61using std::string; 62using std::string;
62 63
63/*
64//utility shader objects (not shader programs)
65GLhandleARB gSumLightsVertex;
66GLhandleARB gLightVertex;
67GLhandleARB gLightFuncVertex;
68GLhandleARB gLightFragment;
69GLhandleARB gWaterFogFragment;
70
71//utility WindLight shader objects (not shader programs)
72GLhandleARB gWindLightVertex;
73GLhandleARB gWindLightFragment;
74GLhandleARB gGammaFragment;
75*/
76
77LLVector4 gShinyOrigin; 64LLVector4 gShinyOrigin;
78 65
79//object shaders 66//object shaders
@@ -506,11 +493,11 @@ void LLShaderMgr::dumpObjectLog(GLhandleARB ret, BOOL warns)
506 LLString log = get_object_log(ret); 493 LLString log = get_object_log(ret);
507 if (warns) 494 if (warns)
508 { 495 {
509 llwarns << log << llendl; 496 LL_WARNS("ShaderLoading") << log << LL_ENDL;
510 } 497 }
511 else 498 else
512 { 499 {
513 llinfos << log << llendl; 500 LL_DEBUGS("ShaderLoading") << log << LL_ENDL;
514 } 501 }
515} 502}
516 503
@@ -520,10 +507,10 @@ GLhandleARB LLShaderMgr::loadShaderFile(const LLString& filename, S32 & shader_l
520 error = glGetError(); 507 error = glGetError();
521 if (error != GL_NO_ERROR) 508 if (error != GL_NO_ERROR)
522 { 509 {
523 llwarns << "GL ERROR entering loadShaderFile(): " << error << llendl; 510 LL_WARNS("ShaderLoading") << "GL ERROR entering loadShaderFile(): " << error << LL_ENDL;
524 } 511 }
525 512
526 llinfos << "Loading shader file: " << filename << " class " << shader_level << llendl; 513 LL_DEBUGS("ShaderLoading") << "Loading shader file: " << filename << " class " << shader_level << LL_ENDL;
527 514
528 if (filename.empty()) 515 if (filename.empty())
529 { 516 {
@@ -532,7 +519,7 @@ GLhandleARB LLShaderMgr::loadShaderFile(const LLString& filename, S32 & shader_l
532 519
533 520
534 //read in from file 521 //read in from file
535 FILE* file = NULL; 522 LLFILE* file = NULL;
536 523
537 S32 try_gpu_class = shader_level; 524 S32 try_gpu_class = shader_level;
538 S32 gpu_class; 525 S32 gpu_class;
@@ -544,20 +531,18 @@ GLhandleARB LLShaderMgr::loadShaderFile(const LLString& filename, S32 & shader_l
544 fname << gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS, "shaders/class"); 531 fname << gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS, "shaders/class");
545 fname << gpu_class << "/" << filename; 532 fname << gpu_class << "/" << filename;
546 533
547 llinfos << "Looking in " << fname.str().c_str() << llendl; 534 LL_DEBUGS("ShaderLoading") << "Looking in " << fname.str().c_str() << LL_ENDL;
548 file = fopen(fname.str().c_str(), "r"); /* Flawfinder: ignore */ 535 file = LLFile::fopen(fname.str().c_str(), "r"); /* Flawfinder: ignore */
549 if (file) 536 if (file)
550 { 537 {
551#if !LL_RELEASE_FOR_DOWNLOAD 538 LL_INFOS("ShaderLoading") << "Loading file: shaders/class" << gpu_class << "/" << filename << " (Want class " << gpu_class << ")" << LL_ENDL;
552 llinfos << "Found shader file: " << fname.str() << llendl;
553#endif
554 break; // done 539 break; // done
555 } 540 }
556 } 541 }
557 542
558 if (file == NULL) 543 if (file == NULL)
559 { 544 {
560 llinfos << "GLSL Shader file not found: " << filename << llendl; 545 LL_WARNS("ShaderLoading") << "GLSL Shader file not found: " << filename << LL_ENDL;
561 return 0; 546 return 0;
562 } 547 }
563 548
@@ -580,7 +565,7 @@ GLhandleARB LLShaderMgr::loadShaderFile(const LLString& filename, S32 & shader_l
580 error = glGetError(); 565 error = glGetError();
581 if (error != GL_NO_ERROR) 566 if (error != GL_NO_ERROR)
582 { 567 {
583 llwarns << "GL ERROR in glCreateShaderObjectARB: " << error << llendl; 568 LL_WARNS("ShaderLoading") << "GL ERROR in glCreateShaderObjectARB: " << error << LL_ENDL;
584 } 569 }
585 else 570 else
586 { 571 {
@@ -589,7 +574,7 @@ GLhandleARB LLShaderMgr::loadShaderFile(const LLString& filename, S32 & shader_l
589 error = glGetError(); 574 error = glGetError();
590 if (error != GL_NO_ERROR) 575 if (error != GL_NO_ERROR)
591 { 576 {
592 llwarns << "GL ERROR in glShaderSourceARB: " << error << llendl; 577 LL_WARNS("ShaderLoading") << "GL ERROR in glShaderSourceARB: " << error << LL_ENDL;
593 } 578 }
594 else 579 else
595 { 580 {
@@ -598,7 +583,7 @@ GLhandleARB LLShaderMgr::loadShaderFile(const LLString& filename, S32 & shader_l
598 error = glGetError(); 583 error = glGetError();
599 if (error != GL_NO_ERROR) 584 if (error != GL_NO_ERROR)
600 { 585 {
601 llwarns << "GL ERROR in glCompileShaderARB: " << error << llendl; 586 LL_WARNS("ShaderLoading") << "GL ERROR in glCompileShaderARB: " << error << LL_ENDL;
602 } 587 }
603 } 588 }
604 } 589 }
@@ -616,7 +601,7 @@ GLhandleARB LLShaderMgr::loadShaderFile(const LLString& filename, S32 & shader_l
616 if (error != GL_NO_ERROR || success == GL_FALSE) 601 if (error != GL_NO_ERROR || success == GL_FALSE)
617 { 602 {
618 //an error occured, print log 603 //an error occured, print log
619 llwarns << "GLSL Compilation Error: (" << error << ") in " << filename << llendl; 604 LL_WARNS("ShaderLoading") << "GLSL Compilation Error: (" << error << ") in " << filename << LL_ENDL;
620 dumpObjectLog(ret); 605 dumpObjectLog(ret);
621 ret = 0; 606 ret = 0;
622 } 607 }
@@ -641,7 +626,7 @@ GLhandleARB LLShaderMgr::loadShaderFile(const LLString& filename, S32 & shader_l
641 shader_level--; 626 shader_level--;
642 return loadShaderFile(filename,shader_level,type); 627 return loadShaderFile(filename,shader_level,type);
643 } 628 }
644 llwarns << "Failed to load " << filename << llendl; 629 LL_WARNS("ShaderLoading") << "Failed to load " << filename << LL_ENDL;
645 } 630 }
646 return ret; 631 return ret;
647} 632}
@@ -655,7 +640,7 @@ BOOL LLShaderMgr::linkProgramObject(GLhandleARB obj, BOOL suppress_errors)
655 if (!suppress_errors && success == GL_FALSE) 640 if (!suppress_errors && success == GL_FALSE)
656 { 641 {
657 //an error occured, print log 642 //an error occured, print log
658 llwarns << "GLSL Linker Error:" << llendl; 643 LL_WARNS("ShaderLoading") << "GLSL Linker Error:" << LL_ENDL;
659 } 644 }
660 645
661// NOTE: Removing LL_DARWIN block as it doesn't seem to actually give the correct answer, 646// NOTE: Removing LL_DARWIN block as it doesn't seem to actually give the correct answer,
@@ -675,7 +660,7 @@ BOOL LLShaderMgr::linkProgramObject(GLhandleARB obj, BOOL suppress_errors)
675 CGLGetParameter (ctx, kCGLCPGPUFragmentProcessing, &fragmentGPUProcessing); 660 CGLGetParameter (ctx, kCGLCPGPUFragmentProcessing, &fragmentGPUProcessing);
676 if (!fragmentGPUProcessing || !vertexGPUProcessing) 661 if (!fragmentGPUProcessing || !vertexGPUProcessing)
677 { 662 {
678 llwarns << "GLSL Linker: Running in Software:" << llendl; 663 LL_WARNS("ShaderLoading") << "GLSL Linker: Running in Software:" << LL_ENDL;
679 success = GL_FALSE; 664 success = GL_FALSE;
680 suppress_errors = FALSE; 665 suppress_errors = FALSE;
681 } 666 }
@@ -685,7 +670,7 @@ BOOL LLShaderMgr::linkProgramObject(GLhandleARB obj, BOOL suppress_errors)
685 LLString::toLower(log); 670 LLString::toLower(log);
686 if (log.find("software") != LLString::npos) 671 if (log.find("software") != LLString::npos)
687 { 672 {
688 llwarns << "GLSL Linker: Running in Software:" << llendl; 673 LL_WARNS("ShaderLoading") << "GLSL Linker: Running in Software:" << LL_ENDL;
689 success = GL_FALSE; 674 success = GL_FALSE;
690 suppress_errors = FALSE; 675 suppress_errors = FALSE;
691 } 676 }
@@ -706,7 +691,7 @@ BOOL LLShaderMgr::validateProgramObject(GLhandleARB obj)
706 glGetObjectParameterivARB(obj, GL_OBJECT_VALIDATE_STATUS_ARB, &success); 691 glGetObjectParameterivARB(obj, GL_OBJECT_VALIDATE_STATUS_ARB, &success);
707 if (success == GL_FALSE) 692 if (success == GL_FALSE)
708 { 693 {
709 llwarns << "GLSL program not valid: " << llendl; 694 LL_WARNS("ShaderLoading") << "GLSL program not valid: " << LL_ENDL;
710 dumpObjectLog(obj); 695 dumpObjectLog(obj);
711 } 696 }
712 else 697 else
@@ -757,7 +742,7 @@ void LLShaderMgr::setShaders()
757 gPipeline.setLightingDetail(-1); 742 gPipeline.setLightingDetail(-1);
758 743
759 // Shaders 744 // Shaders
760 llinfos << "\n~~~~~~~~~~~~~~~~~~\n Loading Shaders:\n~~~~~~~~~~~~~~~~~~" << llendl; 745 LL_INFOS("ShaderLoading") << "\n~~~~~~~~~~~~~~~~~~\n Loading Shaders:\n~~~~~~~~~~~~~~~~~~" << LL_ENDL;
761 for (S32 i = 0; i < SHADER_COUNT; i++) 746 for (S32 i = 0; i < SHADER_COUNT; i++)
762 { 747 {
763 sVertexShaderLevel[i] = 0; 748 sVertexShaderLevel[i] = 0;
@@ -1625,7 +1610,7 @@ BOOL LLGLSLShader::createShader(vector<string> * attributes,
1625 for ( ; fileIter != mShaderFiles.end(); fileIter++ ) 1610 for ( ; fileIter != mShaderFiles.end(); fileIter++ )
1626 { 1611 {
1627 GLhandleARB shaderhandle = LLShaderMgr::loadShaderFile((*fileIter).first, mShaderLevel, (*fileIter).second); 1612 GLhandleARB shaderhandle = LLShaderMgr::loadShaderFile((*fileIter).first, mShaderLevel, (*fileIter).second);
1628 lldebugs << "SHADER FILE: " << (*fileIter).first << " mShaderLevel=" << mShaderLevel << llendl; 1613 LL_DEBUGS("ShaderLoading") << "SHADER FILE: " << (*fileIter).first << " mShaderLevel=" << mShaderLevel << LL_ENDL;
1629 if (mShaderLevel > 0) 1614 if (mShaderLevel > 0)
1630 { 1615 {
1631 attachObject(shaderhandle); 1616 attachObject(shaderhandle);
@@ -1647,12 +1632,12 @@ BOOL LLGLSLShader::createShader(vector<string> * attributes,
1647 } 1632 }
1648 if( !success ) 1633 if( !success )
1649 { 1634 {
1650 llwarns << "Failed to link shader: " << mName << llendl; 1635 LL_WARNS("ShaderLoading") << "Failed to link shader: " << mName << LL_ENDL;
1651 1636
1652 // Try again using a lower shader level; 1637 // Try again using a lower shader level;
1653 if (mShaderLevel > 0) 1638 if (mShaderLevel > 0)
1654 { 1639 {
1655 llwarns << "Failed to link using shader level " << mShaderLevel << ". Trying again using shader level " << (mShaderLevel - 1) << "." << llendl; 1640 LL_WARNS("ShaderLoading") << "Failed to link using shader level " << mShaderLevel << " trying again using shader level " << (mShaderLevel - 1) << LL_ENDL;
1656 mShaderLevel--; 1641 mShaderLevel--;
1657 return createShader(attributes,uniforms); 1642 return createShader(attributes,uniforms);
1658 } 1643 }
@@ -1671,7 +1656,7 @@ BOOL LLGLSLShader::attachObject(std::string object)
1671 } 1656 }
1672 else 1657 else
1673 { 1658 {
1674 llwarns << "Attempting to attach shader object that hasn't been compiled: " << object << llendl; 1659 LL_WARNS("ShaderLoading") << "Attempting to attach shader object that hasn't been compiled: " << object << LL_ENDL;
1675 return FALSE; 1660 return FALSE;
1676 } 1661 }
1677} 1662}
@@ -1686,7 +1671,7 @@ void LLGLSLShader::attachObject(GLhandleARB object)
1686 } 1671 }
1687 else 1672 else
1688 { 1673 {
1689 llwarns << "Attempting to attach non existing shader object. " << llendl; 1674 LL_WARNS("ShaderLoading") << "Attempting to attach non existing shader object. " << LL_ENDL;
1690 } 1675 }
1691} 1676}
1692 1677
@@ -1718,7 +1703,7 @@ BOOL LLGLSLShader::mapAttributes(const vector<string> * attributes)
1718 if (index != -1) 1703 if (index != -1)
1719 { 1704 {
1720 mAttribute[i] = index; 1705 mAttribute[i] = index;
1721 // llinfos << "Attribute " << name << " assigned to channel " << index << llendl; 1706 LL_DEBUGS("ShaderLoading") << "Attribute " << name << " assigned to channel " << index << LL_ENDL;
1722 } 1707 }
1723 } 1708 }
1724 if (attributes != NULL) 1709 if (attributes != NULL)
@@ -1730,7 +1715,7 @@ BOOL LLGLSLShader::mapAttributes(const vector<string> * attributes)
1730 if (index != -1) 1715 if (index != -1)
1731 { 1716 {
1732 mAttribute[LLShaderMgr::sReservedAttribs.size() + i] = index; 1717 mAttribute[LLShaderMgr::sReservedAttribs.size() + i] = index;
1733 // llinfos << "Attribute " << name << " assigned to channel " << index << llendl; 1718 LL_DEBUGS("ShaderLoading") << "Attribute " << name << " assigned to channel " << index << LL_ENDL;
1734 } 1719 }
1735 } 1720 }
1736 } 1721 }
@@ -1759,9 +1744,7 @@ void LLGLSLShader::mapUniform(GLint index, const vector<string> * uniforms)
1759 if (location != -1) 1744 if (location != -1)
1760 { 1745 {
1761 mUniformMap[name] = location; 1746 mUniformMap[name] = location;
1762#if 0 // !LL_RELEASE_FOR_DOWNLOAD 1747 LL_DEBUGS("ShaderLoading") << "Uniform " << name << " is at location " << location << LL_ENDL;
1763 llinfos << "Uniform " << name << " is at location " << location << llendl;
1764#endif
1765 1748
1766 //find the index of this uniform 1749 //find the index of this uniform
1767 for (S32 i = 0; i < (S32) LLShaderMgr::sReservedUniforms.size(); i++) 1750 for (S32 i = 0; i < (S32) LLShaderMgr::sReservedUniforms.size(); i++)
@@ -1798,7 +1781,7 @@ GLint LLGLSLShader::mapUniformTextureChannel(GLint location, GLenum type)
1798 if (type >= GL_SAMPLER_1D_ARB && type <= GL_SAMPLER_2D_RECT_SHADOW_ARB) 1781 if (type >= GL_SAMPLER_1D_ARB && type <= GL_SAMPLER_2D_RECT_SHADOW_ARB)
1799 { //this here is a texture 1782 { //this here is a texture
1800 glUniform1iARB(location, mActiveTextureChannels); 1783 glUniform1iARB(location, mActiveTextureChannels);
1801 llinfos << "Assigned to texture channel " << mActiveTextureChannels << llendl; 1784 LL_DEBUGS("ShaderLoading") << "Assigned to texture channel " << mActiveTextureChannels << LL_ENDL;
1802 return mActiveTextureChannels++; 1785 return mActiveTextureChannels++;
1803 } 1786 }
1804 return -1; 1787 return -1;
@@ -1866,17 +1849,22 @@ void LLGLSLShader::unbind()
1866 } 1849 }
1867} 1850}
1868 1851
1852void LLGLSLShader::bindNoShader(void)
1853{
1854 glUseProgramObjectARB(0);
1855}
1856
1869S32 LLGLSLShader::enableTexture(S32 uniform, S32 mode) 1857S32 LLGLSLShader::enableTexture(S32 uniform, S32 mode)
1870{ 1858{
1871 if (uniform < 0 || uniform >= (S32)mTexture.size()) 1859 if (uniform < 0 || uniform >= (S32)mTexture.size())
1872 { 1860 {
1873 UNIFORM_ERRS << "LLGLSLShader::enableTexture: uniform out of range: " << uniform << llendl; 1861 UNIFORM_ERRS << "Uniform out of range: " << uniform << LL_ENDL;
1874 return -1; 1862 return -1;
1875 } 1863 }
1876 S32 index = mTexture[uniform]; 1864 S32 index = mTexture[uniform];
1877 if (index != -1) 1865 if (index != -1)
1878 { 1866 {
1879 glActiveTextureARB(GL_TEXTURE0_ARB+index); 1867 gGL.getTexUnit(index)->activate();
1880 glEnable(mode); 1868 glEnable(mode);
1881 } 1869 }
1882 return index; 1870 return index;
@@ -1886,13 +1874,13 @@ S32 LLGLSLShader::disableTexture(S32 uniform, S32 mode)
1886{ 1874{
1887 if (uniform < 0 || uniform >= (S32)mTexture.size()) 1875 if (uniform < 0 || uniform >= (S32)mTexture.size())
1888 { 1876 {
1889 UNIFORM_ERRS << "LLGLSLShader::disableTexture: uniform out of range: " << uniform << llendl; 1877 UNIFORM_ERRS << "Uniform out of range: " << uniform << LL_ENDL;
1890 return -1; 1878 return -1;
1891 } 1879 }
1892 S32 index = mTexture[uniform]; 1880 S32 index = mTexture[uniform];
1893 if (index != -1) 1881 if (index != -1)
1894 { 1882 {
1895 glActiveTextureARB(GL_TEXTURE0_ARB+index); 1883 gGL.getTexUnit(index)->activate();
1896 glDisable(mode); 1884 glDisable(mode);
1897 } 1885 }
1898 return index; 1886 return index;
@@ -1904,7 +1892,7 @@ void LLGLSLShader::uniform1f(U32 index, GLfloat x)
1904 { 1892 {
1905 if (mUniform.size() <= index) 1893 if (mUniform.size() <= index)
1906 { 1894 {
1907 UNIFORM_ERRS << "Uniform index out of bounds." << llendl; 1895 UNIFORM_ERRS << "Uniform index out of bounds." << LL_ENDL;
1908 return; 1896 return;
1909 } 1897 }
1910 1898
@@ -1926,7 +1914,7 @@ void LLGLSLShader::uniform2f(U32 index, GLfloat x, GLfloat y)
1926 { 1914 {
1927 if (mUniform.size() <= index) 1915 if (mUniform.size() <= index)
1928 { 1916 {
1929 UNIFORM_ERRS << "Uniform index out of bounds." << llendl; 1917 UNIFORM_ERRS << "Uniform index out of bounds." << LL_ENDL;
1930 return; 1918 return;
1931 } 1919 }
1932 1920
@@ -1949,7 +1937,7 @@ void LLGLSLShader::uniform3f(U32 index, GLfloat x, GLfloat y, GLfloat z)
1949 { 1937 {
1950 if (mUniform.size() <= index) 1938 if (mUniform.size() <= index)
1951 { 1939 {
1952 UNIFORM_ERRS << "Uniform index out of bounds." << llendl; 1940 UNIFORM_ERRS << "Uniform index out of bounds." << LL_ENDL;
1953 return; 1941 return;
1954 } 1942 }
1955 1943
@@ -1972,7 +1960,7 @@ void LLGLSLShader::uniform4f(U32 index, GLfloat x, GLfloat y, GLfloat z, GLfloat
1972 { 1960 {
1973 if (mUniform.size() <= index) 1961 if (mUniform.size() <= index)
1974 { 1962 {
1975 UNIFORM_ERRS << "Uniform index out of bounds." << llendl; 1963 UNIFORM_ERRS << "Uniform index out of bounds." << LL_ENDL;
1976 return; 1964 return;
1977 } 1965 }
1978 1966
@@ -1995,7 +1983,7 @@ void LLGLSLShader::uniform1fv(U32 index, U32 count, const GLfloat* v)
1995 { 1983 {
1996 if (mUniform.size() <= index) 1984 if (mUniform.size() <= index)
1997 { 1985 {
1998 UNIFORM_ERRS << "Uniform index out of bounds." << llendl; 1986 UNIFORM_ERRS << "Uniform index out of bounds." << LL_ENDL;
1999 return; 1987 return;
2000 } 1988 }
2001 1989
@@ -2018,7 +2006,7 @@ void LLGLSLShader::uniform2fv(U32 index, U32 count, const GLfloat* v)
2018 { 2006 {
2019 if (mUniform.size() <= index) 2007 if (mUniform.size() <= index)
2020 { 2008 {
2021 UNIFORM_ERRS << "Uniform index out of bounds." << llendl; 2009 UNIFORM_ERRS << "Uniform index out of bounds." << LL_ENDL;
2022 return; 2010 return;
2023 } 2011 }
2024 2012
@@ -2041,7 +2029,7 @@ void LLGLSLShader::uniform3fv(U32 index, U32 count, const GLfloat* v)
2041 { 2029 {
2042 if (mUniform.size() <= index) 2030 if (mUniform.size() <= index)
2043 { 2031 {
2044 UNIFORM_ERRS << "Uniform index out of bounds." << llendl; 2032 UNIFORM_ERRS << "Uniform index out of bounds." << LL_ENDL;
2045 return; 2033 return;
2046 } 2034 }
2047 2035
@@ -2064,7 +2052,7 @@ void LLGLSLShader::uniform4fv(U32 index, U32 count, const GLfloat* v)
2064 { 2052 {
2065 if (mUniform.size() <= index) 2053 if (mUniform.size() <= index)
2066 { 2054 {
2067 UNIFORM_ERRS << "Uniform index out of bounds." << llendl; 2055 UNIFORM_ERRS << "Uniform index out of bounds." << LL_ENDL;
2068 return; 2056 return;
2069 } 2057 }
2070 2058
@@ -2087,7 +2075,7 @@ void LLGLSLShader::uniformMatrix2fv(U32 index, U32 count, GLboolean transpose, c
2087 { 2075 {
2088 if (mUniform.size() <= index) 2076 if (mUniform.size() <= index)
2089 { 2077 {
2090 UNIFORM_ERRS << "Uniform index out of bounds." << llendl; 2078 UNIFORM_ERRS << "Uniform index out of bounds." << LL_ENDL;
2091 return; 2079 return;
2092 } 2080 }
2093 2081
@@ -2104,7 +2092,7 @@ void LLGLSLShader::uniformMatrix3fv(U32 index, U32 count, GLboolean transpose, c
2104 { 2092 {
2105 if (mUniform.size() <= index) 2093 if (mUniform.size() <= index)
2106 { 2094 {
2107 UNIFORM_ERRS << "Uniform index out of bounds." << llendl; 2095 UNIFORM_ERRS << "Uniform index out of bounds." << LL_ENDL;
2108 return; 2096 return;
2109 } 2097 }
2110 2098
@@ -2121,7 +2109,7 @@ void LLGLSLShader::uniformMatrix4fv(U32 index, U32 count, GLboolean transpose, c
2121 { 2109 {
2122 if (mUniform.size() <= index) 2110 if (mUniform.size() <= index)
2123 { 2111 {
2124 UNIFORM_ERRS << "Uniform index out of bounds." << llendl; 2112 UNIFORM_ERRS << "Uniform index out of bounds." << LL_ENDL;
2125 return; 2113 return;
2126 } 2114 }
2127 2115
diff --git a/linden/indra/newview/llglslshader.h b/linden/indra/newview/llglslshader.h
index f3f83da..e517b94 100644
--- a/linden/indra/newview/llglslshader.h
+++ b/linden/indra/newview/llglslshader.h
@@ -118,6 +118,9 @@ public:
118 void bind(); 118 void bind();
119 void unbind(); 119 void unbind();
120 120
121 // Unbinds any previously bound shader by explicitly binding no shader.
122 static void bindNoShader(void);
123
121 GLhandleARB mProgramObject; 124 GLhandleARB mProgramObject;
122 std::vector<GLint> mAttribute; //lookup table of attribute enum to attribute channel 125 std::vector<GLint> mAttribute; //lookup table of attribute enum to attribute channel
123 std::vector<GLint> mUniform; //lookup table of uniform enum to uniform location 126 std::vector<GLint> mUniform; //lookup table of uniform enum to uniform location
diff --git a/linden/indra/newview/llgroupnotify.cpp b/linden/indra/newview/llgroupnotify.cpp
index 5b6c3ca..d760e8b 100644
--- a/linden/indra/newview/llgroupnotify.cpp
+++ b/linden/indra/newview/llgroupnotify.cpp
@@ -217,8 +217,8 @@ LLGroupNotifyBox::LLGroupNotifyBox(const char* subject,
217 LLFontGL::sSansSerif, 217 LLFontGL::sSansSerif,
218 FALSE); 218 FALSE);
219 219
220 LLStyle headerstyle(true,LLColor4::black,"SansSerifBig"); 220 static const LLStyleSP headerstyle(new LLStyle(true,LLColor4::black,"SansSerifBig"));
221 LLStyle datestyle(true,LLColor4::black,"serif"); 221 static const LLStyleSP datestyle(new LLStyle(true,LLColor4::black,"serif"));
222 222
223 text->appendStyledText(subject,false,false,&headerstyle); 223 text->appendStyledText(subject,false,false,&headerstyle);
224 text->appendStyledText(time_buf,false,false,&datestyle); 224 text->appendStyledText(time_buf,false,false,&datestyle);
diff --git a/linden/indra/newview/llhoverview.cpp b/linden/indra/newview/llhoverview.cpp
index 6cc3873..082f413 100644
--- a/linden/indra/newview/llhoverview.cpp
+++ b/linden/indra/newview/llhoverview.cpp
@@ -38,7 +38,7 @@
38#include "llfontgl.h" 38#include "llfontgl.h"
39#include "message.h" 39#include "message.h"
40#include "llgl.h" 40#include "llgl.h"
41#include "llglimmediate.h" 41#include "llrender.h"
42#include "llfontgl.h" 42#include "llfontgl.h"
43#include "llparcel.h" 43#include "llparcel.h"
44#include "lldbstrings.h" 44#include "lldbstrings.h"
@@ -52,6 +52,7 @@
52#include "llpermissions.h" 52#include "llpermissions.h"
53#include "llresmgr.h" 53#include "llresmgr.h"
54#include "llselectmgr.h" 54#include "llselectmgr.h"
55#include "lltrans.h"
55#include "lltoolmgr.h" 56#include "lltoolmgr.h"
56#include "lltoolpie.h" 57#include "lltoolpie.h"
57#include "lltoolselectland.h" 58#include "lltoolselectland.h"
@@ -254,7 +255,7 @@ void LLHoverView::updateText()
254 } 255 }
255 else 256 else
256 { 257 {
257 line.append("Person"); 258 line.append(LLTrans::getString("TooltipPerson"));
258 } 259 }
259 mText.push_back(line); 260 mText.push_back(line);
260 } 261 }
@@ -275,7 +276,7 @@ void LLHoverView::updateText()
275 line.clear(); 276 line.clear();
276 if (nodep->mName.empty()) 277 if (nodep->mName.empty())
277 { 278 {
278 line.append("(no name)"); 279 line.append(LLTrans::getString("TooltipNoName"));
279 } 280 }
280 else 281 else
281 { 282 {
@@ -291,7 +292,7 @@ void LLHoverView::updateText()
291 292
292 // Line: "Owner: James Linden" 293 // Line: "Owner: James Linden"
293 line.clear(); 294 line.clear();
294 line.append("Owner: "); 295 line.append(LLTrans::getString("TooltipOwner") + " ");
295 296
296 if (nodep->mValid) 297 if (nodep->mValid)
297 { 298 {
@@ -302,7 +303,7 @@ void LLHoverView::updateText()
302 owner = nodep->mPermissions->getOwner(); 303 owner = nodep->mPermissions->getOwner();
303 if (LLUUID::null == owner) 304 if (LLUUID::null == owner)
304 { 305 {
305 line.append("Public"); 306 line.append(LLTrans::getString("TooltipPublic"));
306 } 307 }
307 else if(gCacheName->getFullName(owner, name)) 308 else if(gCacheName->getFullName(owner, name))
308 { 309 {
@@ -310,7 +311,7 @@ void LLHoverView::updateText()
310 } 311 }
311 else 312 else
312 { 313 {
313 line.append("Retrieving..."); 314 line.append(LLTrans::getString("RetrievingData"));
314 } 315 }
315 } 316 }
316 else 317 else
@@ -320,17 +321,17 @@ void LLHoverView::updateText()
320 if (gCacheName->getGroupName(owner, name)) 321 if (gCacheName->getGroupName(owner, name))
321 { 322 {
322 line.append(name); 323 line.append(name);
323 line.append("(Group)"); 324 line.append(LLTrans::getString("TooltipIsGroup"));
324 } 325 }
325 else 326 else
326 { 327 {
327 line.append("Retrieving..."); 328 line.append(LLTrans::getString("RetrievingData"));
328 } 329 }
329 } 330 }
330 } 331 }
331 else 332 else
332 { 333 {
333 line.append("Retrieving..."); 334 line.append(LLTrans::getString("RetrievingData"));
334 } 335 }
335 mText.push_back(line); 336 mText.push_back(line);
336 337
@@ -350,47 +351,48 @@ void LLHoverView::updateText()
350 line.clear(); 351 line.clear();
351 if (object->flagScripted()) 352 if (object->flagScripted())
352 { 353 {
353 line.append("Script "); 354
355 line.append(LLTrans::getString("TooltipFlagScript") + " ");
354 } 356 }
355 357
356 if (object->usePhysics()) 358 if (object->usePhysics())
357 { 359 {
358 line.append("Physics "); 360 line.append(LLTrans::getString("TooltipFlagPhysics") + " ");
359 } 361 }
360 362
361 if (object->flagHandleTouch() || (parent && parent->flagHandleTouch()) ) 363 if (object->flagHandleTouch() || (parent && parent->flagHandleTouch()) )
362 { 364 {
363 line.append("Touch "); 365 line.append(LLTrans::getString("TooltipFlagTouch") + " ");
364 suppressObjectHoverDisplay = FALSE; // Show tip 366 suppressObjectHoverDisplay = FALSE; // Show tip
365 } 367 }
366 368
367 if (object->flagTakesMoney() || (parent && parent->flagTakesMoney()) ) 369 if (object->flagTakesMoney() || (parent && parent->flagTakesMoney()) )
368 { 370 {
369 line.append("L$ "); 371 line.append(LLTrans::getString("TooltipFlagL$") + " ");
370 suppressObjectHoverDisplay = FALSE; // Show tip 372 suppressObjectHoverDisplay = FALSE; // Show tip
371 } 373 }
372 374
373 if (object->flagAllowInventoryAdd()) 375 if (object->flagAllowInventoryAdd())
374 { 376 {
375 line.append("Drop Inventory "); 377 line.append(LLTrans::getString("TooltipFlagDropInventory") + " ");
376 suppressObjectHoverDisplay = FALSE; // Show tip 378 suppressObjectHoverDisplay = FALSE; // Show tip
377 } 379 }
378 380
379 if (object->flagPhantom()) 381 if (object->flagPhantom())
380 { 382 {
381 line.append("Phantom "); 383 line.append(LLTrans::getString("TooltipFlagPhantom") + " ");
382 } 384 }
383 385
384 if (object->flagTemporary()) 386 if (object->flagTemporary())
385 { 387 {
386 line.append("Temporary "); 388 line.append(LLTrans::getString("TooltipFlagTemporary") + " ");
387 } 389 }
388 390
389 if (object->usePhysics() || 391 if (object->usePhysics() ||
390 object->flagHandleTouch() || 392 object->flagHandleTouch() ||
391 (parent && parent->flagHandleTouch()) ) 393 (parent && parent->flagHandleTouch()) )
392 { 394 {
393 line.append("(Right-click for menu) "); 395 line.append(LLTrans::getString("TooltipFlagRightClickMenu") + " ");
394 } 396 }
395 mText.push_back(line); 397 mText.push_back(line);
396 } 398 }
@@ -406,12 +408,14 @@ void LLHoverView::updateText()
406 nodep->mSaleInfo.getSaleType() != LLSaleInfo::FS_COPY); 408 nodep->mSaleInfo.getSaleType() != LLSaleInfo::FS_COPY);
407 if (for_copy) 409 if (for_copy)
408 { 410 {
409 line.append("Free to copy"); 411 line.append(LLTrans::getString("TooltipFreeToCopy"));
410 suppressObjectHoverDisplay = FALSE; // Show tip 412 suppressObjectHoverDisplay = FALSE; // Show tip
411 } 413 }
412 else if (for_sale) 414 else if (for_sale)
413 { 415 {
414 line.append(llformat("For Sale: L$%d", nodep->mSaleInfo.getSalePrice())); 416 LLString::format_map_t args;
417 args["[AMOUNT]"] = nodep->mSaleInfo.getSalePrice();
418 line.append(LLTrans::getString("TooltipForSaleL$", args));
415 suppressObjectHoverDisplay = FALSE; // Show tip 419 suppressObjectHoverDisplay = FALSE; // Show tip
416 } 420 }
417 else 421 else
@@ -422,7 +426,9 @@ void LLHoverView::updateText()
422 } 426 }
423 else 427 else
424 { 428 {
425 line.append("For Sale: Retrieving..."); 429 LLString::format_map_t args;
430 args["[MESSAGE]"] = LLTrans::getString("RetrievingData");
431 line.append(LLTrans::getString("TooltipForSaleMsg", args));
426 } 432 }
427 mText.push_back(line); 433 mText.push_back(line);
428 } 434 }
@@ -459,7 +465,7 @@ void LLHoverView::updateText()
459 465
460 // Line: "Land" 466 // Line: "Land"
461 line.clear(); 467 line.clear();
462 line.append("Land: "); 468 line.append(LLTrans::getString("TooltipLand"));
463 if (hover_parcel) 469 if (hover_parcel)
464 { 470 {
465 line.append(hover_parcel->getName()); 471 line.append(hover_parcel->getName());
@@ -468,25 +474,25 @@ void LLHoverView::updateText()
468 474
469 // Line: "Owner: James Linden" 475 // Line: "Owner: James Linden"
470 line.clear(); 476 line.clear();
471 line.append("Owner: "); 477 line.append(LLTrans::getString("TooltipOwner") + " ");
472 478
473 if ( hover_parcel ) 479 if ( hover_parcel )
474 { 480 {
475 std::string name; 481 std::string name;
476 if (LLUUID::null == owner) 482 if (LLUUID::null == owner)
477 { 483 {
478 line.append("Public"); 484 line.append(LLTrans::getString("TooltipPublic"));
479 } 485 }
480 else if (hover_parcel->getIsGroupOwned()) 486 else if (hover_parcel->getIsGroupOwned())
481 { 487 {
482 if (gCacheName->getGroupName(owner, name)) 488 if (gCacheName->getGroupName(owner, name))
483 { 489 {
484 line.append(name); 490 line.append(name);
485 line.append("(Group)"); 491 line.append(LLTrans::getString("TooltipIsGroup"));
486 } 492 }
487 else 493 else
488 { 494 {
489 line.append("Retrieving..."); 495 line.append(LLTrans::getString("RetrievingData"));
490 } 496 }
491 } 497 }
492 else if(gCacheName->getFullName(owner, name)) 498 else if(gCacheName->getFullName(owner, name))
@@ -495,12 +501,12 @@ void LLHoverView::updateText()
495 } 501 }
496 else 502 else
497 { 503 {
498 line.append("Retrieving..."); 504 line.append(LLTrans::getString("RetrievingData"));
499 } 505 }
500 } 506 }
501 else 507 else
502 { 508 {
503 line.append("Retrieving..."); 509 line.append(LLTrans::getString("RetrievingData"));
504 } 510 }
505 mText.push_back(line); 511 mText.push_back(line);
506 512
@@ -519,27 +525,26 @@ void LLHoverView::updateText()
519 { 525 {
520 if ( hover_parcel->getAllowGroupModify() ) 526 if ( hover_parcel->getAllowGroupModify() )
521 { 527 {
522 line.append("Group Build"); 528 line.append(LLTrans::getString("TooltipFlagGroupBuild"));
523 } 529 }
524 else 530 else
525 { 531 {
526 line.append("No Build"); 532 line.append(LLTrans::getString("TooltipFlagNoBuild"));
527 } 533 }
528
529 words++; 534 words++;
530 } 535 }
531 536
532 if ( !hover_parcel->getAllowTerraform() ) 537 if ( !hover_parcel->getAllowTerraform() )
533 { 538 {
534 if (words) line.append(", "); 539 if (words) line.append(", ");
535 line.append("No Edit"); 540 line.append(LLTrans::getString("TooltipFlagNoEdit"));
536 words++; 541 words++;
537 } 542 }
538 543
539 if ( hover_parcel->getAllowDamage() ) 544 if ( hover_parcel->getAllowDamage() )
540 { 545 {
541 if (words) line.append(", "); 546 if (words) line.append(", ");
542 line.append("Not Safe"); 547 line.append(LLTrans::getString("TooltipFlagNotSafe"));
543 words++; 548 words++;
544 } 549 }
545 550
@@ -547,7 +552,7 @@ void LLHoverView::updateText()
547 if ( !hover_parcel->getAllowFly() ) 552 if ( !hover_parcel->getAllowFly() )
548 { 553 {
549 if (words) line.append(", "); 554 if (words) line.append(", ");
550 line.append("No Fly"); 555 line.append(LLTrans::getString("TooltipFlagNoFly"));
551 words++; 556 words++;
552 } 557 }
553 558
@@ -556,11 +561,11 @@ void LLHoverView::updateText()
556 if (words) line.append(", "); 561 if (words) line.append(", ");
557 if ( hover_parcel->getAllowGroupScripts() ) 562 if ( hover_parcel->getAllowGroupScripts() )
558 { 563 {
559 line.append("Group Scripts"); 564 line.append(LLTrans::getString("TooltipFlagGroupScripts"));
560 } 565 }
561 else 566 else
562 { 567 {
563 line.append("No Scripts"); 568 line.append(LLTrans::getString("TooltipFlagNoScripts"));
564 } 569 }
565 570
566 words++; 571 words++;
@@ -583,7 +588,9 @@ void LLHoverView::updateText()
583 */ 588 */
584 if (hover_parcel && hover_parcel->getParcelFlag(PF_FOR_SALE)) 589 if (hover_parcel && hover_parcel->getParcelFlag(PF_FOR_SALE))
585 { 590 {
586 line = llformat("For Sale: L$%d", hover_parcel->getSalePrice() ); 591 LLString::format_map_t args;
592 args["[AMOUNT]"] = hover_parcel->getSalePrice();
593 line = LLTrans::getString("TooltipForSaleL$", args);
587 mText.push_back(line); 594 mText.push_back(line);
588 } 595 }
589 } 596 }
diff --git a/linden/indra/newview/llhudeffectlookat.cpp b/linden/indra/newview/llhudeffectlookat.cpp
index 92e7fdf..88ad5d6 100644
--- a/linden/indra/newview/llhudeffectlookat.cpp
+++ b/linden/indra/newview/llhudeffectlookat.cpp
@@ -33,7 +33,7 @@
33 33
34#include "llhudeffectlookat.h" 34#include "llhudeffectlookat.h"
35 35
36#include "llglimmediate.h" 36#include "llrender.h"
37 37
38#include "message.h" 38#include "message.h"
39#include "llagent.h" 39#include "llagent.h"
diff --git a/linden/indra/newview/llhudeffectpointat.cpp b/linden/indra/newview/llhudeffectpointat.cpp
index d42eeb5..8cd1023 100644
--- a/linden/indra/newview/llhudeffectpointat.cpp
+++ b/linden/indra/newview/llhudeffectpointat.cpp
@@ -34,7 +34,7 @@
34#include "llhudeffectpointat.h" 34#include "llhudeffectpointat.h"
35 35
36#include "llgl.h" 36#include "llgl.h"
37#include "llglimmediate.h" 37#include "llrender.h"
38 38
39#include "llagent.h" 39#include "llagent.h"
40#include "lldrawable.h" 40#include "lldrawable.h"
diff --git a/linden/indra/newview/llhudicon.cpp b/linden/indra/newview/llhudicon.cpp
index 010e85f..85cc996 100644
--- a/linden/indra/newview/llhudicon.cpp
+++ b/linden/indra/newview/llhudicon.cpp
@@ -34,7 +34,7 @@
34#include "llhudicon.h" 34#include "llhudicon.h"
35 35
36#include "llgl.h" 36#include "llgl.h"
37#include "llglimmediate.h" 37#include "llrender.h"
38 38
39#include "llviewerobject.h" 39#include "llviewerobject.h"
40#include "lldrawable.h" 40#include "lldrawable.h"
diff --git a/linden/indra/newview/llhudtext.cpp b/linden/indra/newview/llhudtext.cpp
index f8eddc7..26df22a 100644
--- a/linden/indra/newview/llhudtext.cpp
+++ b/linden/indra/newview/llhudtext.cpp
@@ -33,7 +33,7 @@
33 33
34#include "llhudtext.h" 34#include "llhudtext.h"
35 35
36#include "llglimmediate.h" 36#include "llrender.h"
37 37
38#include "llagent.h" 38#include "llagent.h"
39#include "llviewercontrol.h" 39#include "llviewercontrol.h"
@@ -308,7 +308,6 @@ void LLHUDText::renderText(BOOL for_select)
308 } 308 }
309 LLUI::popMatrix(); 309 LLUI::popMatrix();
310 310
311
312 LLImageGL::unbindTexture(0); 311 LLImageGL::unbindTexture(0);
313 LLGLDepthTest gls_depth(mZCompare ? GL_TRUE : GL_FALSE, GL_FALSE); 312 LLGLDepthTest gls_depth(mZCompare ? GL_TRUE : GL_FALSE, GL_FALSE);
314 313
@@ -375,7 +374,7 @@ void LLHUDText::renderText(BOOL for_select)
375 374
376 // Render label 375 // Render label
377 { 376 {
378 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); 377 gGL.getTexUnit(0)->setTextureBlendType(LLTexUnit::TB_MULT);
379 378
380 for(std::vector<LLHUDTextSegment>::iterator segment_iter = mLabelSegments.begin(); 379 for(std::vector<LLHUDTextSegment>::iterator segment_iter = mLabelSegments.begin();
381 segment_iter != mLabelSegments.end(); ++segment_iter ) 380 segment_iter != mLabelSegments.end(); ++segment_iter )
diff --git a/linden/indra/newview/llimpanel.cpp b/linden/indra/newview/llimpanel.cpp
index 3cb9dfb..2e3682d 100644
--- a/linden/indra/newview/llimpanel.cpp
+++ b/linden/indra/newview/llimpanel.cpp
@@ -48,16 +48,19 @@
48#include "llchat.h" 48#include "llchat.h"
49#include "llconsole.h" 49#include "llconsole.h"
50#include "llfloater.h" 50#include "llfloater.h"
51#include "llfloatergroupinfo.h"
52#include "llimview.h"
51#include "llinventory.h" 53#include "llinventory.h"
52#include "llinventorymodel.h" 54#include "llinventorymodel.h"
53#include "llinventoryview.h" 55#include "llinventoryview.h"
56#include "llfloateractivespeakers.h"
54#include "llfloateravatarinfo.h" 57#include "llfloateravatarinfo.h"
55#include "llfloaterchat.h" 58#include "llfloaterchat.h"
56#include "llkeyboard.h" 59#include "llkeyboard.h"
57#include "lllineeditor.h" 60#include "lllineeditor.h"
61#include "llnotify.h"
58#include "llresmgr.h" 62#include "llresmgr.h"
59#include "lltabcontainer.h" 63#include "lltabcontainer.h"
60#include "llimview.h"
61#include "llviewertexteditor.h" 64#include "llviewertexteditor.h"
62#include "llviewermessage.h" 65#include "llviewermessage.h"
63#include "llviewerstats.h" 66#include "llviewerstats.h"
@@ -68,11 +71,8 @@
68#include "llfloaterhtml.h" 71#include "llfloaterhtml.h"
69#include "llweb.h" 72#include "llweb.h"
70#include "llhttpclient.h" 73#include "llhttpclient.h"
71#include "llfloateractivespeakers.h" // LLSpeakerMgr
72#include "llfloatergroupinfo.h"
73#include "llsdutil.h"
74#include "llnotify.h"
75#include "llmutelist.h" 74#include "llmutelist.h"
75#include "llstylemap.h"
76 76
77// 77//
78// Constants 78// Constants
@@ -1454,24 +1454,20 @@ BOOL LLFloaterIMPanel::inviteToSession(const LLDynamicArray<LLUUID>& ids)
1454 return TRUE; 1454 return TRUE;
1455} 1455}
1456 1456
1457void LLFloaterIMPanel::addHistoryLine(const LLUUID& source, const std::string &utf8msg, const LLColor4& color, bool log_to_file) 1457void LLFloaterIMPanel::addHistoryLine(const std::string &utf8msg, const LLColor4& color, bool log_to_file, const LLUUID& source, const char *name)
1458{ 1458{
1459 // start tab flashing when receiving im for background session from user 1459 // start tab flashing when receiving im for background session from user
1460 LLMultiFloater* hostp = getHost(); 1460 if (source != LLUUID::null)
1461 if( !isInVisibleChain()
1462 && hostp
1463 && source != gAgent.getID())
1464 { 1461 {
1465 hostp->setFloaterFlashing(this, TRUE); 1462 LLMultiFloater* hostp = getHost();
1463 if( !isInVisibleChain()
1464 && hostp
1465 && source != gAgent.getID())
1466 {
1467 hostp->setFloaterFlashing(this, TRUE);
1468 }
1466 } 1469 }
1467 1470
1468 addHistoryLine(utf8msg, color, log_to_file);
1469 mSpeakers->speakerChatted(source);
1470 mSpeakers->setSpeakerTyping(source, FALSE);
1471}
1472
1473void LLFloaterIMPanel::addHistoryLine(const std::string &utf8msg, const LLColor4& color, bool log_to_file)
1474{
1475 // Now we're adding the actual line of text, so erase the 1471 // Now we're adding the actual line of text, so erase the
1476 // "Foo is typing..." text segment, and the optional timestamp 1472 // "Foo is typing..." text segment, and the optional timestamp
1477 // if it was present. JC 1473 // if it was present. JC
@@ -1485,6 +1481,22 @@ void LLFloaterIMPanel::addHistoryLine(const std::string &utf8msg, const LLColor4
1485 timestring = mHistoryEditor->appendTime(prepend_newline); 1481 timestring = mHistoryEditor->appendTime(prepend_newline);
1486 prepend_newline = false; 1482 prepend_newline = false;
1487 } 1483 }
1484
1485 // 'name' is a sender name that we want to hotlink so that clicking on it opens a profile.
1486 if (name != NULL) // If name exists, then add it to the front of the message.
1487 {
1488 // Don't hotlink any messages from the system (e.g. "Second Life:"), so just add those in plain text.
1489 if (!strcmp(name,SYSTEM_FROM))
1490 {
1491 mHistoryEditor->appendColoredText(name,false,false,color);
1492 }
1493 else
1494 {
1495 // Convert the name to a hotlink and add to message.
1496 const LLStyleSP &source_style = LLStyleMap::instance().lookup(source);
1497 mHistoryEditor->appendStyledText(name, false, false, &source_style);
1498 }
1499 }
1488 mHistoryEditor->appendColoredText(utf8msg, false, prepend_newline, color); 1500 mHistoryEditor->appendColoredText(utf8msg, false, prepend_newline, color);
1489 1501
1490 if (log_to_file 1502 if (log_to_file
@@ -1492,9 +1504,9 @@ void LLFloaterIMPanel::addHistoryLine(const std::string &utf8msg, const LLColor4
1492 { 1504 {
1493 LLString histstr; 1505 LLString histstr;
1494 if (gSavedPerAccountSettings.getBOOL("IMLogTimestamp")) 1506 if (gSavedPerAccountSettings.getBOOL("IMLogTimestamp"))
1495 histstr = LLLogChat::timestamp(gSavedPerAccountSettings.getBOOL("LogTimestampDate")) + utf8msg; 1507 histstr = LLLogChat::timestamp(gSavedPerAccountSettings.getBOOL("LogTimestampDate")) + LLString(name) + utf8msg;
1496 else 1508 else
1497 histstr = utf8msg; 1509 histstr = LLString(name) + utf8msg;
1498 1510
1499 LLLogChat::saveHistory(getTitle(),histstr); 1511 LLLogChat::saveHistory(getTitle(),histstr);
1500 } 1512 }
@@ -1503,6 +1515,12 @@ void LLFloaterIMPanel::addHistoryLine(const std::string &utf8msg, const LLColor4
1503 { 1515 {
1504 mNumUnreadMessages++; 1516 mNumUnreadMessages++;
1505 } 1517 }
1518
1519 if (source != LLUUID::null)
1520 {
1521 mSpeakers->speakerChatted(source);
1522 mSpeakers->setSpeakerTyping(source, FALSE);
1523 }
1506} 1524}
1507 1525
1508 1526
@@ -1836,6 +1854,11 @@ void deliver_message(const std::string& utf8_text,
1836 (EInstantMessage)new_dialog, 1854 (EInstantMessage)new_dialog,
1837 im_session_id); 1855 im_session_id);
1838 gAgent.sendReliableMessage(); 1856 gAgent.sendReliableMessage();
1857
1858 if (LLMuteList::getInstance())
1859 {
1860 LLMuteList::getInstance()->autoRemove(other_participant_id, LLMuteList::AR_IM);
1861 }
1839} 1862}
1840 1863
1841void LLFloaterIMPanel::sendMsg() 1864void LLFloaterIMPanel::sendMsg()
@@ -1888,7 +1911,7 @@ void LLFloaterIMPanel::sendMsg()
1888 1911
1889 BOOL other_was_typing = mOtherTyping; 1912 BOOL other_was_typing = mOtherTyping;
1890 1913
1891 addHistoryLine(gAgent.getID(), history_echo, gSavedSettings.getColor("IMChatColor")); 1914 addHistoryLine(history_echo, gSavedSettings.getColor("IMChatColor"), true, gAgent.getID());
1892 1915
1893 if (other_was_typing) 1916 if (other_was_typing)
1894 { 1917 {
@@ -2189,4 +2212,3 @@ void LLFloaterIMPanel::onConfirmForceCloseError(S32 option, void* data)
2189} 2212}
2190 2213
2191 2214
2192
diff --git a/linden/indra/newview/llimpanel.h b/linden/indra/newview/llimpanel.h
index 16d4042..2ed866b 100644
--- a/linden/indra/newview/llimpanel.h
+++ b/linden/indra/newview/llimpanel.h
@@ -38,6 +38,7 @@
38#include "lldarray.h" 38#include "lldarray.h"
39#include "llinstantmessage.h" 39#include "llinstantmessage.h"
40#include "llvoiceclient.h" 40#include "llvoiceclient.h"
41#include "llstyle.h"
41 42
42class LLLineEditor; 43class LLLineEditor;
43class LLViewerTextEditor; 44class LLViewerTextEditor;
@@ -202,13 +203,12 @@ public:
202 // Return TRUE if successful, otherwise FALSE. 203 // Return TRUE if successful, otherwise FALSE.
203 BOOL inviteToSession(const LLDynamicArray<LLUUID>& agent_ids); 204 BOOL inviteToSession(const LLDynamicArray<LLUUID>& agent_ids);
204 205
205 void addHistoryLine(const LLUUID& source,
206 const std::string &utf8msg,
207 const LLColor4& color = LLColor4::white,
208 bool log_to_file = true);
209 void addHistoryLine(const std::string &utf8msg, 206 void addHistoryLine(const std::string &utf8msg,
210 const LLColor4& color = LLColor4::white, 207 const LLColor4& color = LLColor4::white,
211 bool log_to_file = true); 208 bool log_to_file = true,
209 const LLUUID& source = LLUUID::null,
210 const char *name = NULL);
211
212 void setInputFocus( BOOL b ); 212 void setInputFocus( BOOL b );
213 213
214 void selectAll(); 214 void selectAll();
@@ -357,6 +357,9 @@ private:
357 LLFrameTimer mLastKeystrokeTimer; 357 LLFrameTimer mLastKeystrokeTimer;
358 358
359 void disableWhileSessionStarting(); 359 void disableWhileSessionStarting();
360
361 typedef std::map<LLUUID, LLStyleSP> styleMap;
362 static styleMap mStyleMap;
360}; 363};
361 364
362 365
diff --git a/linden/indra/newview/llimview.cpp b/linden/indra/newview/llimview.cpp
index e451388..797c2a4 100644
--- a/linden/indra/newview/llimview.cpp
+++ b/linden/indra/newview/llimview.cpp
@@ -83,6 +83,7 @@ LLIMMgr* gIMMgr = NULL;
83// *FIXME: make these all either UIStrings or Strings 83// *FIXME: make these all either UIStrings or Strings
84static LLString sOnlyUserMessage; 84static LLString sOnlyUserMessage;
85static LLUIString sOfflineMessage; 85static LLUIString sOfflineMessage;
86static LLString sMutedMessage;
86static LLUIString sInviteMessage; 87static LLUIString sInviteMessage;
87 88
88std::map<std::string,LLString> LLFloaterIM::sEventStringsMap; 89std::map<std::string,LLString> LLFloaterIM::sEventStringsMap;
@@ -161,6 +162,7 @@ BOOL LLFloaterIM::postBuild()
161 sOfflineMessage = getUIString("offline_message"); 162 sOfflineMessage = getUIString("offline_message");
162 163
163 sInviteMessage = getUIString("invite_message"); 164 sInviteMessage = getUIString("invite_message");
165 sMutedMessage = childGetText("muted_message");
164 166
165 if ( sErrorStringsMap.find("generic") == sErrorStringsMap.end() ) 167 if ( sErrorStringsMap.find("generic") == sErrorStringsMap.end() )
166 { 168 {
@@ -400,10 +402,10 @@ void LLIMMgr::addMessage(
400 EInstantMessage dialog, 402 EInstantMessage dialog,
401 U32 parent_estate_id, 403 U32 parent_estate_id,
402 const LLUUID& region_id, 404 const LLUUID& region_id,
403 const LLVector3& position) 405 const LLVector3& position,
406 bool link_name) // If this is true, then we insert the name and link it to a profile
404{ 407{
405 LLUUID other_participant_id = target_id; 408 LLUUID other_participant_id = target_id;
406 bool is_from_system = target_id.isNull() || !strcmp(from, SYSTEM_FROM);
407 409
408 // don't process muted IMs 410 // don't process muted IMs
409 if (LLMuteList::getInstance()->isMuted( 411 if (LLMuteList::getInstance()->isMuted(
@@ -420,8 +422,6 @@ void LLIMMgr::addMessage(
420 other_participant_id = LLUUID::null; 422 other_participant_id = LLUUID::null;
421 } 423 }
422 424
423
424
425 LLFloaterIMPanel* floater; 425 LLFloaterIMPanel* floater;
426 LLUUID new_session_id = session_id; 426 LLUUID new_session_id = session_id;
427 if (new_session_id.isNull()) 427 if (new_session_id.isNull())
@@ -482,15 +482,17 @@ void LLIMMgr::addMessage(
482 } 482 }
483 483
484 // now add message to floater 484 // now add message to floater
485 if ( is_from_system ) // chat came from system 485 bool is_from_system = target_id.isNull() || !strcmp(from, SYSTEM_FROM);
486 const LLColor4& color = ( is_from_system ?
487 gSavedSettings.getColor4("SystemChatColor") :
488 gSavedSettings.getColor("IMChatColor"));
489 if ( !link_name )
486 { 490 {
487 floater->addHistoryLine( 491 floater->addHistoryLine(msg,color); // No name to prepend, so just add the message normally
488 msg,
489 gSavedSettings.getColor4("SystemChatColor"));
490 } 492 }
491 else 493 else
492 { 494 {
493 floater->addHistoryLine(other_participant_id, msg, gSavedSettings.getColor("IMChatColor")); 495 floater->addHistoryLine(msg, color, true, other_participant_id, from); // Insert linked name to front of message
494 } 496 }
495 497
496 LLFloaterChatterBox* chat_floater = LLFloaterChatterBox::getInstance(LLSD()); 498 LLFloaterChatterBox* chat_floater = LLFloaterChatterBox::getInstance(LLSD());
@@ -615,6 +617,8 @@ LLUUID LLIMMgr::addSession(
615 617
616 noteOfflineUsers(floater, ids); 618 noteOfflineUsers(floater, ids);
617 LLFloaterChatterBox::showInstance(session_id); 619 LLFloaterChatterBox::showInstance(session_id);
620 noteMutedUsers(floater, ids);
621 LLFloaterChatterBox::getInstance(LLSD())->showFloater(floater);
618 } 622 }
619 else 623 else
620 { 624 {
@@ -659,6 +663,7 @@ LLUUID LLIMMgr::addSession(
659 663
660 noteOfflineUsers(floater, ids); 664 noteOfflineUsers(floater, ids);
661 LLFloaterChatterBox::showInstance(session_id); 665 LLFloaterChatterBox::showInstance(session_id);
666 noteMutedUsers(floater, ids);
662 } 667 }
663 else 668 else
664 { 669 {
@@ -1232,6 +1237,31 @@ void LLIMMgr::noteOfflineUsers(
1232 } 1237 }
1233} 1238}
1234 1239
1240void LLIMMgr::noteMutedUsers(LLFloaterIMPanel* floater,
1241 const LLDynamicArray<LLUUID>& ids)
1242{
1243 S32 count = ids.count();
1244 if(count > 0)
1245 {
1246 const LLRelationship* info = NULL;
1247 LLAvatarTracker& at = LLAvatarTracker::instance();
1248 for(S32 i = 0; i < count; ++i)
1249 {
1250 info = at.getBuddyInfo(ids.get(i));
1251 char first[DB_FIRST_NAME_BUF_SIZE]; /*Flawfinder: ignore*/
1252 char last[DB_LAST_NAME_BUF_SIZE]; /*Flawfinder: ignore*/
1253 if(info && LLMuteList::getInstance() && LLMuteList::getInstance()->isMuted(ids.get(i))
1254 && gCacheName->getName(ids.get(i), first, last))
1255 {
1256 LLUIString muted = sMutedMessage;
1257 muted.setArg("[FIRST]", first);
1258 muted.setArg("[LAST]", last);
1259 floater->addHistoryLine(muted);
1260 }
1261 }
1262 }
1263}
1264
1235void LLIMMgr::processIMTypingStart(const LLIMInfo* im_info) 1265void LLIMMgr::processIMTypingStart(const LLIMInfo* im_info)
1236{ 1266{
1237 processIMTypingCore(im_info, TRUE); 1267 processIMTypingCore(im_info, TRUE);
@@ -1520,8 +1550,7 @@ public:
1520 snprintf( 1550 snprintf(
1521 buffer, 1551 buffer,
1522 sizeof(buffer), 1552 sizeof(buffer),
1523 "%s%s%s%s", 1553 "%s%s%s",
1524 name.c_str(),
1525 separator_string, 1554 separator_string,
1526 saved, 1555 saved,
1527 (message.c_str() + message_offset)); /*Flawfinder: ignore*/ 1556 (message.c_str() + message_offset)); /*Flawfinder: ignore*/
@@ -1540,7 +1569,8 @@ public:
1540 IM_SESSION_INVITE, 1569 IM_SESSION_INVITE,
1541 message_params["parent_estate_id"].asInteger(), 1570 message_params["parent_estate_id"].asInteger(),
1542 message_params["region_id"].asUUID(), 1571 message_params["region_id"].asUUID(),
1543 ll_vector3_from_sd(message_params["position"])); 1572 ll_vector3_from_sd(message_params["position"]),
1573 true);
1544 1574
1545 snprintf( 1575 snprintf(
1546 buffer, 1576 buffer,
@@ -1628,4 +1658,3 @@ LLHTTPRegistration<LLViewerChatterBoxInvitation>
1628 gHTTPRegistrationMessageChatterBoxInvitation( 1658 gHTTPRegistrationMessageChatterBoxInvitation(
1629 "/message/ChatterBoxInvitation"); 1659 "/message/ChatterBoxInvitation");
1630 1660
1631
diff --git a/linden/indra/newview/llimview.h b/linden/indra/newview/llimview.h
index 44cb992..b2621e8 100644
--- a/linden/indra/newview/llimview.h
+++ b/linden/indra/newview/llimview.h
@@ -65,7 +65,8 @@ public:
65 EInstantMessage dialog = IM_NOTHING_SPECIAL, 65 EInstantMessage dialog = IM_NOTHING_SPECIAL,
66 U32 parent_estate_id = 0, 66 U32 parent_estate_id = 0,
67 const LLUUID& region_id = LLUUID::null, 67 const LLUUID& region_id = LLUUID::null,
68 const LLVector3& position = LLVector3::zero); 68 const LLVector3& position = LLVector3::zero,
69 bool link_name = false);
69 70
70 void addSystemMessage(const LLUUID& session_id, const LLString& message_name, const LLString::format_map_t& args); 71 void addSystemMessage(const LLUUID& session_id, const LLString& message_name, const LLString::format_map_t& args);
71 72
@@ -192,6 +193,7 @@ private:
192 // reduce 'hello' messages to the linden employees unlucky enough 193 // reduce 'hello' messages to the linden employees unlucky enough
193 // to have their calling card in the default inventory. 194 // to have their calling card in the default inventory.
194 void noteOfflineUsers(LLFloaterIMPanel* panel, const LLDynamicArray<LLUUID>& ids); 195 void noteOfflineUsers(LLFloaterIMPanel* panel, const LLDynamicArray<LLUUID>& ids);
196 void noteMutedUsers(LLFloaterIMPanel* panel, const LLDynamicArray<LLUUID>& ids);
195 197
196 void processIMTypingCore(const LLIMInfo* im_info, BOOL typing); 198 void processIMTypingCore(const LLIMInfo* im_info, BOOL typing);
197 199
diff --git a/linden/indra/newview/llinventorymodel.cpp b/linden/indra/newview/llinventorymodel.cpp
index e76c427..91bdb8d 100644
--- a/linden/indra/newview/llinventorymodel.cpp
+++ b/linden/indra/newview/llinventorymodel.cpp
@@ -1810,7 +1810,7 @@ bool LLInventoryModel::loadSkeleton(
1810 const S32 NO_VERSION = LLViewerInventoryCategory::VERSION_UNKNOWN; 1810 const S32 NO_VERSION = LLViewerInventoryCategory::VERSION_UNKNOWN;
1811 std::string gzip_filename(inventory_filename); 1811 std::string gzip_filename(inventory_filename);
1812 gzip_filename.append(".gz"); 1812 gzip_filename.append(".gz");
1813 FILE* fp = LLFile::fopen(gzip_filename.c_str(), "rb"); /*Flawfinder: ignore*/ 1813 LLFILE* fp = LLFile::fopen(gzip_filename.c_str(), "rb"); /*Flawfinder: ignore*/
1814 bool remove_inventory_file = false; 1814 bool remove_inventory_file = false;
1815 if(fp) 1815 if(fp)
1816 { 1816 {
@@ -2344,7 +2344,7 @@ bool LLInventoryModel::loadFromFile(
2344 return false; 2344 return false;
2345 } 2345 }
2346 llinfos << "LLInventoryModel::loadFromFile(" << filename << ")" << llendl; 2346 llinfos << "LLInventoryModel::loadFromFile(" << filename << ")" << llendl;
2347 FILE* file = LLFile::fopen(filename, "rb"); /*Flawfinder: ignore*/ 2347 LLFILE* file = LLFile::fopen(filename, "rb"); /*Flawfinder: ignore*/
2348 if(!file) 2348 if(!file)
2349 { 2349 {
2350 llinfos << "unable to load inventory from: " << filename << llendl; 2350 llinfos << "unable to load inventory from: " << filename << llendl;
@@ -2417,7 +2417,7 @@ bool LLInventoryModel::saveToFile(
2417 return false; 2417 return false;
2418 } 2418 }
2419 llinfos << "LLInventoryModel::saveToFile(" << filename << ")" << llendl; 2419 llinfos << "LLInventoryModel::saveToFile(" << filename << ")" << llendl;
2420 FILE* file = LLFile::fopen(filename, "wb"); /*Flawfinder: ignore*/ 2420 LLFILE* file = LLFile::fopen(filename, "wb"); /*Flawfinder: ignore*/
2421 if(!file) 2421 if(!file)
2422 { 2422 {
2423 llwarns << "unable to save inventory to: " << filename << llendl; 2423 llwarns << "unable to save inventory to: " << filename << llendl;
@@ -3692,7 +3692,7 @@ BOOL decompress_file(const char* src_filename, const char* dst_filename)
3692 BOOL rv = FALSE; 3692 BOOL rv = FALSE;
3693 gzFile src = NULL; 3693 gzFile src = NULL;
3694 U8* buffer = NULL; 3694 U8* buffer = NULL;
3695 FILE* dst = NULL; 3695 LLFILE* dst = NULL;
3696 S32 bytes = 0; 3696 S32 bytes = 0;
3697 const S32 DECOMPRESS_BUFFER_SIZE = 32000; 3697 const S32 DECOMPRESS_BUFFER_SIZE = 32000;
3698 3698
diff --git a/linden/indra/newview/lljoystickbutton.cpp b/linden/indra/newview/lljoystickbutton.cpp
index 1978b78..3957b0a 100644
--- a/linden/indra/newview/lljoystickbutton.cpp
+++ b/linden/indra/newview/lljoystickbutton.cpp
@@ -36,7 +36,7 @@
36// Library includes 36// Library includes
37#include "llcoord.h" 37#include "llcoord.h"
38#include "indra_constants.h" 38#include "indra_constants.h"
39#include "llglimmediate.h" 39#include "llrender.h"
40 40
41// Project includes 41// Project includes
42#include "llui.h" 42#include "llui.h"
diff --git a/linden/indra/newview/lllogchat.cpp b/linden/indra/newview/lllogchat.cpp
index 7be9781..38c4869 100644
--- a/linden/indra/newview/lllogchat.cpp
+++ b/linden/indra/newview/lllogchat.cpp
@@ -76,7 +76,7 @@ void LLLogChat::saveHistory(LLString filename, LLString line)
76 return; 76 return;
77 } 77 }
78 78
79 FILE* fp = LLFile::fopen(LLLogChat::makeLogFileName(filename).c_str(), "a"); /*Flawfinder: ignore*/ 79 LLFILE* fp = LLFile::fopen(LLLogChat::makeLogFileName(filename).c_str(), "a"); /*Flawfinder: ignore*/
80 if (!fp) 80 if (!fp)
81 { 81 {
82 llinfos << "Couldn't open chat history log!" << llendl; 82 llinfos << "Couldn't open chat history log!" << llendl;
@@ -96,7 +96,7 @@ void LLLogChat::loadHistory(LLString filename , void (*callback)(ELogLineType,LL
96 llerrs << "Filename is Empty!" << llendl; 96 llerrs << "Filename is Empty!" << llendl;
97 } 97 }
98 98
99 FILE* fptr = LLFile::fopen(makeLogFileName(filename).c_str(), "r"); /*Flawfinder: ignore*/ 99 LLFILE* fptr = LLFile::fopen(makeLogFileName(filename).c_str(), "r"); /*Flawfinder: ignore*/
100 if (!fptr) 100 if (!fptr)
101 { 101 {
102 //LLUIString message = LLFloaterChat::getInstance()->getUIString("IM_logging_string"); 102 //LLUIString message = LLFloaterChat::getInstance()->getUIString("IM_logging_string");
diff --git a/linden/indra/newview/llmanip.cpp b/linden/indra/newview/llmanip.cpp
index e0621a3..5c19685 100644
--- a/linden/indra/newview/llmanip.cpp
+++ b/linden/indra/newview/llmanip.cpp
@@ -36,7 +36,7 @@
36#include "llmath.h" 36#include "llmath.h"
37#include "v3math.h" 37#include "v3math.h"
38#include "llgl.h" 38#include "llgl.h"
39#include "llglimmediate.h" 39#include "llrender.h"
40#include "llprimitive.h" 40#include "llprimitive.h"
41#include "llview.h" 41#include "llview.h"
42#include "llviewerimagelist.h" 42#include "llviewerimagelist.h"
diff --git a/linden/indra/newview/llmaniprotate.cpp b/linden/indra/newview/llmaniprotate.cpp
index 43a22e5..b60e29a 100644
--- a/linden/indra/newview/llmaniprotate.cpp
+++ b/linden/indra/newview/llmaniprotate.cpp
@@ -36,7 +36,7 @@
36// library includes 36// library includes
37#include "llmath.h" 37#include "llmath.h"
38#include "llgl.h" 38#include "llgl.h"
39#include "llglimmediate.h" 39#include "llrender.h"
40#include "v4color.h" 40#include "v4color.h"
41#include "llprimitive.h" 41#include "llprimitive.h"
42#include "llview.h" 42#include "llview.h"
diff --git a/linden/indra/newview/llmanipscale.cpp b/linden/indra/newview/llmanipscale.cpp
index bb26484..d5ab7a1 100644
--- a/linden/indra/newview/llmanipscale.cpp
+++ b/linden/indra/newview/llmanipscale.cpp
@@ -38,7 +38,7 @@
38#include "v3math.h" 38#include "v3math.h"
39#include "llquaternion.h" 39#include "llquaternion.h"
40#include "llgl.h" 40#include "llgl.h"
41#include "llglimmediate.h" 41#include "llrender.h"
42#include "v4color.h" 42#include "v4color.h"
43#include "llprimitive.h" 43#include "llprimitive.h"
44 44
diff --git a/linden/indra/newview/llmaniptranslate.cpp b/linden/indra/newview/llmaniptranslate.cpp
index ac41068..7dbb470 100644
--- a/linden/indra/newview/llmaniptranslate.cpp
+++ b/linden/indra/newview/llmaniptranslate.cpp
@@ -38,7 +38,7 @@
38#include "llmaniptranslate.h" 38#include "llmaniptranslate.h"
39 39
40#include "llgl.h" 40#include "llgl.h"
41#include "llglimmediate.h" 41#include "llrender.h"
42 42
43#include "llagent.h" 43#include "llagent.h"
44#include "llbbox.h" 44#include "llbbox.h"
@@ -1535,10 +1535,10 @@ void LLManipTranslate::renderSnapGuides()
1535 LLGLDepthTest gls_depth(GL_TRUE, GL_FALSE, GL_GREATER); 1535 LLGLDepthTest gls_depth(GL_TRUE, GL_FALSE, GL_GREATER);
1536 glBindTexture(GL_TEXTURE_2D, sGridTex); 1536 glBindTexture(GL_TEXTURE_2D, sGridTex);
1537 gGL.flush(); 1537 gGL.flush();
1538 gGL.blendFunc(GL_ZERO, GL_ONE_MINUS_SRC_ALPHA); 1538 gGL.blendFunc(LLRender::BF_ZERO, LLRender::BF_ONE_MINUS_SOURCE_ALPHA);
1539 renderGrid(u,v,tiles,0.9f, 0.9f, 0.9f,a*0.15f); 1539 renderGrid(u,v,tiles,0.9f, 0.9f, 0.9f,a*0.15f);
1540 gGL.flush(); 1540 gGL.flush();
1541 gGL.blendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); 1541 gGL.setSceneBlendType(LLRender::BT_ALPHA);
1542 } 1542 }
1543 1543
1544 { 1544 {
@@ -1649,7 +1649,7 @@ void LLManipTranslate::highlightIntersection(LLVector3 normal,
1649 LLGLEnable stencil(GL_STENCIL_TEST); 1649 LLGLEnable stencil(GL_STENCIL_TEST);
1650 LLGLDepthTest depth (GL_TRUE, GL_FALSE, GL_ALWAYS); 1650 LLGLDepthTest depth (GL_TRUE, GL_FALSE, GL_ALWAYS);
1651 glStencilFunc(GL_ALWAYS, 0, stencil_mask); 1651 glStencilFunc(GL_ALWAYS, 0, stencil_mask);
1652 glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE); 1652 gGL.setColorMask(false, false);
1653 LLImageGL::unbindTexture(0); 1653 LLImageGL::unbindTexture(0);
1654 glColor4f(1,1,1,1); 1654 glColor4f(1,1,1,1);
1655 1655
@@ -1700,7 +1700,7 @@ void LLManipTranslate::highlightIntersection(LLVector3 normal,
1700 LLPipeline::toggleRenderType(LLPipeline::RENDER_TYPE_CLOUDS); 1700 LLPipeline::toggleRenderType(LLPipeline::RENDER_TYPE_CLOUDS);
1701 } 1701 }
1702 1702
1703 glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_FALSE); 1703 gGL.setColorMask(true, false);
1704 } 1704 }
1705 gGL.color4f(1,1,1,1); 1705 gGL.color4f(1,1,1,1);
1706 1706
diff --git a/linden/indra/newview/llmemoryview.cpp b/linden/indra/newview/llmemoryview.cpp
index a19328a..ca38a9c 100644
--- a/linden/indra/newview/llmemoryview.cpp
+++ b/linden/indra/newview/llmemoryview.cpp
@@ -58,7 +58,7 @@ mDelay(120)
58 58
59#ifdef MEM_DUMP_DATA 59#ifdef MEM_DUMP_DATA
60 // clear out file. 60 // clear out file.
61 FILE *dump = fopen("memusagedump.txt", "w"); 61 LLFILE *dump = LLFile::fopen("memusagedump.txt", "w");
62 fclose(dump); 62 fclose(dump);
63#endif 63#endif
64} 64}
@@ -262,7 +262,7 @@ void LLMemoryView::dumpData()
262 // reset timer 262 // reset timer
263 mDumpTimer.reset(); 263 mDumpTimer.reset();
264 // append dump info to text file 264 // append dump info to text file
265 FILE *dump = fopen("memusagedump.txt", "a"); 265 LLFILE *dump = LLFile::fopen("memusagedump.txt", "a");
266 266
267 if (dump) 267 if (dump)
268 { 268 {
diff --git a/linden/indra/newview/llmutelist.cpp b/linden/indra/newview/llmutelist.cpp
index c411ffe..75c7cce 100644
--- a/linden/indra/newview/llmutelist.cpp
+++ b/linden/indra/newview/llmutelist.cpp
@@ -62,6 +62,12 @@
62#include "llviewergenericmessage.h" // for gGenericDispatcher 62#include "llviewergenericmessage.h" // for gGenericDispatcher
63#include "llviewerwindow.h" 63#include "llviewerwindow.h"
64#include "llworld.h" //for particle system banning 64#include "llworld.h" //for particle system banning
65#include "llchat.h"
66#include "llfloaterchat.h"
67#include "llimpanel.h"
68#include "llimview.h"
69#include "llnotify.h"
70#include "lluistring.h"
65#include "llviewerobject.h" 71#include "llviewerobject.h"
66#include "llviewerobjectlist.h" 72#include "llviewerobjectlist.h"
67 73
@@ -437,6 +443,78 @@ void LLMuteList::updateRemove(const LLMute& mute)
437 gAgent.sendReliableMessage(); 443 gAgent.sendReliableMessage();
438} 444}
439 445
446void notify_automute_callback(const LLUUID& agent_id, const char* first_name, const char* last_name, BOOL is_group, void* user_data)
447{
448 U32 temp_data = (U32)user_data;
449 LLMuteList::EAutoReason reason = (LLMuteList::EAutoReason)temp_data;
450 LLUIString auto_message;
451
452 switch (reason)
453 {
454 default:
455 case LLMuteList::AR_IM:
456 auto_message = LLNotifyBox::getTemplateMessage("AutoUnmuteByIM");
457 break;
458 case LLMuteList::AR_INVENTORY:
459 auto_message = LLNotifyBox::getTemplateMessage("AutoUnmuteByInventory");
460 break;
461 case LLMuteList::AR_MONEY:
462 auto_message = LLNotifyBox::getTemplateMessage("AutoUnmuteByMoney");
463 break;
464 }
465
466 auto_message.setArg("[FIRST]", first_name);
467 auto_message.setArg("[LAST]", last_name);
468
469 if (reason == LLMuteList::AR_IM)
470 {
471 LLFloaterIMPanel *timp = gIMMgr->findFloaterBySession(agent_id);
472 if (timp)
473 {
474 timp->addHistoryLine(auto_message.getString());
475 }
476 }
477
478 LLChat auto_chat(auto_message.getString());
479 LLFloaterChat::addChat(auto_chat, FALSE, FALSE);
480}
481
482
483BOOL LLMuteList::autoRemove(const LLUUID& agent_id, const EAutoReason reason, const LLString& first_name, const LLString& last_name)
484{
485 BOOL removed = FALSE;
486
487 if (isMuted(agent_id))
488 {
489 LLMute automute(agent_id, "", LLMute::AGENT);
490 removed = TRUE;
491 remove(automute);
492
493 if (first_name.empty() && last_name.empty())
494 {
495 char cache_first[DB_FIRST_NAME_BUF_SIZE]; /* Flawfinder: ignore */
496 char cache_last[DB_LAST_NAME_BUF_SIZE]; /* Flawfinder: ignore */
497 if (gCacheName->getName(agent_id, cache_first, cache_last))
498 {
499 // name in cache, call callback directly
500 notify_automute_callback(agent_id, cache_first, cache_last, FALSE, (void *)reason);
501 }
502 else
503 {
504 // not in cache, lookup name from cache
505 gCacheName->get(agent_id, FALSE, notify_automute_callback, (void *)reason);
506 }
507 }
508 else
509 {
510 // call callback directly
511 notify_automute_callback(agent_id, first_name.c_str(), last_name.c_str(), FALSE, (void *)reason);
512 }
513 }
514
515 return removed;
516}
517
440 518
441std::vector<LLMute> LLMuteList::getMutes() const 519std::vector<LLMute> LLMuteList::getMutes() const
442{ 520{
@@ -472,7 +550,7 @@ BOOL LLMuteList::loadFromFile(const LLString& filename)
472 return FALSE; 550 return FALSE;
473 } 551 }
474 552
475 FILE* fp = LLFile::fopen(filename.c_str(), "rb"); /*Flawfinder: ignore*/ 553 LLFILE* fp = LLFile::fopen(filename.c_str(), "rb"); /*Flawfinder: ignore*/
476 if (!fp) 554 if (!fp)
477 { 555 {
478 llwarns << "Couldn't open mute list " << filename << llendl; 556 llwarns << "Couldn't open mute list " << filename << llendl;
@@ -522,7 +600,7 @@ BOOL LLMuteList::saveToFile(const LLString& filename)
522 return FALSE; 600 return FALSE;
523 } 601 }
524 602
525 FILE* fp = LLFile::fopen(filename.c_str(), "wb"); /*Flawfinder: ignore*/ 603 LLFILE* fp = LLFile::fopen(filename.c_str(), "wb"); /*Flawfinder: ignore*/
526 if (!fp) 604 if (!fp)
527 { 605 {
528 llwarns << "Couldn't open mute list " << filename << llendl; 606 llwarns << "Couldn't open mute list " << filename << llendl;
diff --git a/linden/indra/newview/llmutelist.h b/linden/indra/newview/llmutelist.h
index e1a87c8..0a8c6aa 100644
--- a/linden/indra/newview/llmutelist.h
+++ b/linden/indra/newview/llmutelist.h
@@ -82,6 +82,15 @@ public:
82class LLMuteList : public LLSingleton<LLMuteList> 82class LLMuteList : public LLSingleton<LLMuteList>
83{ 83{
84public: 84public:
85 // reasons for auto-unmuting a resident
86 enum EAutoReason
87 {
88 AR_IM = 0, // agent IMed a muted resident
89 AR_MONEY = 1, // agent paid L$ to a muted resident
90 AR_INVENTORY = 2, // agent offered inventory to a muted resident
91 AR_COUNT // enum count
92 };
93
85 LLMuteList(); 94 LLMuteList();
86 ~LLMuteList(); 95 ~LLMuteList();
87 96
@@ -98,6 +107,7 @@ public:
98 107
99 // Remove both normal and legacy mutes, for any or all properties. 108 // Remove both normal and legacy mutes, for any or all properties.
100 BOOL remove(const LLMute& mute, U32 flags = 0); 109 BOOL remove(const LLMute& mute, U32 flags = 0);
110 BOOL autoRemove(const LLUUID& agent_id, const EAutoReason reason, const LLString& first_name = "", const LLString& last_name = "");
101 111
102 // Name is required to test against legacy text-only mutes. 112 // Name is required to test against legacy text-only mutes.
103 BOOL isMuted(const LLUUID& id, const LLString& name = LLString::null, U32 flags = 0) const; 113 BOOL isMuted(const LLUUID& id, const LLString& name = LLString::null, U32 flags = 0) const;
diff --git a/linden/indra/newview/llnetmap.cpp b/linden/indra/newview/llnetmap.cpp
index b6e22d8..9629d06 100644
--- a/linden/indra/newview/llnetmap.cpp
+++ b/linden/indra/newview/llnetmap.cpp
@@ -38,7 +38,7 @@
38#include "llui.h" 38#include "llui.h"
39#include "llmath.h" // clampf() 39#include "llmath.h" // clampf()
40#include "llfocusmgr.h" 40#include "llfocusmgr.h"
41#include "llglimmediate.h" 41#include "llrender.h"
42 42
43#include "llagent.h" 43#include "llagent.h"
44#include "llcallingcard.h" 44#include "llcallingcard.h"
@@ -299,7 +299,7 @@ void LLNetMap::draw()
299 gGL.end(); 299 gGL.end();
300 300
301 // Draw water 301 // Draw water
302 glAlphaFunc(GL_GREATER, ABOVE_WATERLINE_ALPHA / 255.f ); 302 gGL.setAlphaRejectSettings(LLRender::CF_GREATER, ABOVE_WATERLINE_ALPHA / 255.f);
303 { 303 {
304 if (regionp->getLand().getWaterTexture()) 304 if (regionp->getLand().getWaterTexture())
305 { 305 {
@@ -316,7 +316,7 @@ void LLNetMap::draw()
316 gGL.end(); 316 gGL.end();
317 } 317 }
318 } 318 }
319 glAlphaFunc(GL_GREATER,0.01f); 319 gGL.setAlphaRejectSettings(LLRender::CF_DEFAULT);
320 } 320 }
321 321
322 322
diff --git a/linden/indra/newview/llnotify.cpp b/linden/indra/newview/llnotify.cpp
index 19695e8..17aff78 100644
--- a/linden/indra/newview/llnotify.cpp
+++ b/linden/indra/newview/llnotify.cpp
@@ -35,7 +35,7 @@
35 35
36#include "llchat.h" 36#include "llchat.h"
37#include "llfocusmgr.h" 37#include "llfocusmgr.h"
38#include "llglimmediate.h" 38#include "llrender.h"
39 39
40#include "llbutton.h" 40#include "llbutton.h"
41#include "llfocusmgr.h" 41#include "llfocusmgr.h"
diff --git a/linden/indra/newview/lloverlaybar.cpp b/linden/indra/newview/lloverlaybar.cpp
index e5c1113..d430d17 100644
--- a/linden/indra/newview/lloverlaybar.cpp
+++ b/linden/indra/newview/lloverlaybar.cpp
@@ -37,7 +37,7 @@
37#include "lloverlaybar.h" 37#include "lloverlaybar.h"
38 38
39#include "audioengine.h" 39#include "audioengine.h"
40#include "llglimmediate.h" 40#include "llrender.h"
41#include "llagent.h" 41#include "llagent.h"
42#include "llbutton.h" 42#include "llbutton.h"
43#include "llchatbar.h" 43#include "llchatbar.h"
diff --git a/linden/indra/newview/llpanelclassified.cpp b/linden/indra/newview/llpanelclassified.cpp
index 7908ccc..45ceeba 100644
--- a/linden/indra/newview/llpanelclassified.cpp
+++ b/linden/indra/newview/llpanelclassified.cpp
@@ -71,6 +71,9 @@
71#include "llappviewer.h" // abortQuit() 71#include "llappviewer.h" // abortQuit()
72 72
73const S32 MINIMUM_PRICE_FOR_LISTING = 50; // L$ 73const S32 MINIMUM_PRICE_FOR_LISTING = 50; // L$
74const S32 MATURE_CONTENT = 1;
75const S32 NON_MATURE_CONTENT = 2;
76const S32 DECLINE_TO_STATE = 0;
74 77
75//static 78//static
76std::list<LLPanelClassified*> LLPanelClassified::sAllPanels; 79std::list<LLPanelClassified*> LLPanelClassified::sAllPanels;
@@ -162,7 +165,7 @@ LLPanelClassified::LLPanelClassified(bool in_finder, bool from_search)
162 mDescEditor(NULL), 165 mDescEditor(NULL),
163 mLocationEditor(NULL), 166 mLocationEditor(NULL),
164 mCategoryCombo(NULL), 167 mCategoryCombo(NULL),
165 mMatureCheck(NULL), 168 mMatureCombo(NULL),
166 mAutoRenewCheck(NULL), 169 mAutoRenewCheck(NULL),
167 mUpdateBtn(NULL), 170 mUpdateBtn(NULL),
168 mTeleportBtn(NULL), 171 mTeleportBtn(NULL),
@@ -276,13 +279,15 @@ BOOL LLPanelClassified::postBuild()
276 mCategoryCombo->setCommitCallback(onCommitAny); 279 mCategoryCombo->setCommitCallback(onCommitAny);
277 mCategoryCombo->setCallbackUserData(this); 280 mCategoryCombo->setCallbackUserData(this);
278 281
279 mMatureCheck = getChild<LLCheckBoxCtrl>( "classified_mature_check"); 282 mMatureCombo = getChild<LLComboBox>( "classified_mature_check");
280 mMatureCheck->setCommitCallback(onCommitAny); 283 mMatureCombo->setCurrentByIndex(0);
281 mMatureCheck->setCallbackUserData(this); 284 mMatureCombo->setCommitCallback(onCommitAny);
285 mMatureCombo->setCallbackUserData(this);
282 if (gAgent.isTeen()) 286 if (gAgent.isTeen())
283 { 287 {
284 // Teens don't get to set mature flag. JC 288 // Teens don't get to set mature flag. JC
285 mMatureCheck->setVisible(FALSE); 289 mMatureCombo->setVisible(FALSE);
290 mMatureCombo->setCurrentByIndex(NON_MATURE_CONTENT);
286 } 291 }
287 292
288 if (!mInFinder) 293 if (!mInFinder)
@@ -532,7 +537,7 @@ void LLPanelClassified::sendClassifiedInfoUpdate()
532 msg->addU32Fast(_PREHASH_ParentEstate, 0); 537 msg->addU32Fast(_PREHASH_ParentEstate, 0);
533 msg->addUUIDFast(_PREHASH_SnapshotID, mSnapshotCtrl->getImageAssetID()); 538 msg->addUUIDFast(_PREHASH_SnapshotID, mSnapshotCtrl->getImageAssetID());
534 msg->addVector3dFast(_PREHASH_PosGlobal, mPosGlobal); 539 msg->addVector3dFast(_PREHASH_PosGlobal, mPosGlobal);
535 BOOL mature = mMatureCheck->get(); 540 BOOL mature = mMatureCombo->getCurrentIndex() == MATURE_CONTENT;
536 BOOL auto_renew = FALSE; 541 BOOL auto_renew = FALSE;
537 if (mAutoRenewCheck) 542 if (mAutoRenewCheck)
538 { 543 {
@@ -656,7 +661,14 @@ void LLPanelClassified::processClassifiedInfoReply(LLMessageSystem *msg, void **
656 self->mLocationChanged = false; 661 self->mLocationChanged = false;
657 662
658 self->mCategoryCombo->setCurrentByIndex(category - 1); 663 self->mCategoryCombo->setCurrentByIndex(category - 1);
659 self->mMatureCheck->set(mature); 664 if(mature)
665 {
666 self->mMatureCombo->setCurrentByIndex(MATURE_CONTENT);
667 }
668 else
669 {
670 self->mMatureCombo->setCurrentByIndex(NON_MATURE_CONTENT);
671 }
660 if (self->mAutoRenewCheck) 672 if (self->mAutoRenewCheck)
661 { 673 {
662 self->mAutoRenewCheck->set(auto_renew); 674 self->mAutoRenewCheck->set(auto_renew);
@@ -722,8 +734,8 @@ void LLPanelClassified::refresh()
722 mCategoryCombo->setEnabled(godlike); 734 mCategoryCombo->setEnabled(godlike);
723 mCategoryCombo->setVisible(godlike); 735 mCategoryCombo->setVisible(godlike);
724 736
725 mMatureCheck->setEnabled(godlike); 737 mMatureCombo->setEnabled(godlike);
726 mMatureCheck->setVisible(godlike); 738 mMatureCombo->setVisible(godlike);
727 739
728 // Jesse (who is the only one who uses this, as far as we can tell 740 // Jesse (who is the only one who uses this, as far as we can tell
729 // Says that he does not want a set location button - he has used it 741 // Says that he does not want a set location button - he has used it
@@ -742,7 +754,7 @@ void LLPanelClassified::refresh()
742 //mPriceEditor->setEnabled(is_self); 754 //mPriceEditor->setEnabled(is_self);
743 mCategoryCombo->setEnabled(is_self); 755 mCategoryCombo->setEnabled(is_self);
744 756
745 mMatureCheck->setEnabled(is_self); 757 mMatureCombo->setEnabled(is_self);
746 758
747 if (mAutoRenewCheck) 759 if (mAutoRenewCheck)
748 { 760 {
@@ -775,15 +787,60 @@ void LLPanelClassified::onClickUpdate(void* data)
775 return; 787 return;
776 }; 788 };
777 789
790 // If user has not set mature, do not allow publish
791 if(self->mMatureCombo->getCurrentIndex() == DECLINE_TO_STATE)
792 {
793 LLString::format_map_t args;
794 gViewerWindow->alertXml("SetClassifiedMature", &callbackConfirmMature, self);
795 return;
796 }
797
798 // Mature content flag is set, proceed
799 self->gotMature();
800}
801
802// static
803void LLPanelClassified::callbackConfirmMature(S32 option, void* data)
804{
805 LLPanelClassified* self = (LLPanelClassified*)data;
806 self->confirmMature(option);
807}
808
809// invoked from callbackConfirmMature
810void LLPanelClassified::confirmMature(S32 option)
811{
812 // 0 == Yes
813 // 1 == No
814 // 2 == Cancel
815 switch(option)
816 {
817 case 0:
818 mMatureCombo->setCurrentByIndex(MATURE_CONTENT);
819 break;
820 case 1:
821 mMatureCombo->setCurrentByIndex(NON_MATURE_CONTENT);
822 break;
823 default:
824 return;
825 }
826
827 // If we got here it means they set a valid value
828 gotMature();
829}
830
831// Called after we have determined whether this classified has
832// mature content or not.
833void LLPanelClassified::gotMature()
834{
778 // if already paid for, just do the update 835 // if already paid for, just do the update
779 if (self->mPaidFor) 836 if (mPaidFor)
780 { 837 {
781 callbackConfirmPublish(0, self); 838 callbackConfirmPublish(0, this);
782 } 839 }
783 else 840 else
784 { 841 {
785 // Ask the user how much they want to pay 842 // Ask the user how much they want to pay
786 LLFloaterPriceForListing::show( callbackGotPriceForListing, self ); 843 LLFloaterPriceForListing::show( callbackGotPriceForListing, this );
787 } 844 }
788} 845}
789 846
@@ -830,8 +887,8 @@ void LLPanelClassified::resetDirty()
830 mLocationChanged = false; 887 mLocationChanged = false;
831 if (mCategoryCombo) 888 if (mCategoryCombo)
832 mCategoryCombo->resetDirty(); 889 mCategoryCombo->resetDirty();
833 if (mMatureCheck) 890 if (mMatureCombo)
834 mMatureCheck->resetDirty(); 891 mMatureCombo->resetDirty();
835 if (mAutoRenewCheck) 892 if (mAutoRenewCheck)
836 mAutoRenewCheck->resetDirty(); 893 mAutoRenewCheck->resetDirty();
837} 894}
@@ -948,7 +1005,7 @@ BOOL LLPanelClassified::checkDirty()
948 if ( mLocationEditor ) mDirty |= mLocationEditor->isDirty(); 1005 if ( mLocationEditor ) mDirty |= mLocationEditor->isDirty();
949 if ( mLocationChanged ) mDirty |= TRUE; 1006 if ( mLocationChanged ) mDirty |= TRUE;
950 if ( mCategoryCombo ) mDirty |= mCategoryCombo->isDirty(); 1007 if ( mCategoryCombo ) mDirty |= mCategoryCombo->isDirty();
951 if ( mMatureCheck ) mDirty |= mMatureCheck->isDirty(); 1008 if ( mMatureCombo ) mDirty |= mMatureCombo->isDirty();
952 if ( mAutoRenewCheck ) mDirty |= mAutoRenewCheck->isDirty(); 1009 if ( mAutoRenewCheck ) mDirty |= mAutoRenewCheck->isDirty();
953 1010
954 return mDirty; 1011 return mDirty;
diff --git a/linden/indra/newview/llpanelclassified.h b/linden/indra/newview/llpanelclassified.h
index 78f8a90..e4c8f42 100644
--- a/linden/indra/newview/llpanelclassified.h
+++ b/linden/indra/newview/llpanelclassified.h
@@ -96,12 +96,17 @@ public:
96 void sendClassifiedInfoRequest(); 96 void sendClassifiedInfoRequest();
97 void sendClassifiedInfoUpdate(); 97 void sendClassifiedInfoUpdate();
98 void resetDirty(); 98 void resetDirty();
99 void confirmPublish(S32 option);
100 99
101 static void processClassifiedInfoReply(LLMessageSystem* msg, void**); 100 static void processClassifiedInfoReply(LLMessageSystem* msg, void**);
102 101
102 // Confirmation dialogs flow in this order
103 static void callbackConfirmMature(S32 option, void* data);
104 void confirmMature(S32 option);
105 void gotMature();
103 static void callbackGotPriceForListing(S32 option, LLString text, void* data); 106 static void callbackGotPriceForListing(S32 option, LLString text, void* data);
104 static void callbackConfirmPublish(S32 option, void* data); 107 static void callbackConfirmPublish(S32 option, void* data);
108 void confirmPublish(S32 option);
109
105 void sendClassifiedClickMessage(const char* type); 110 void sendClassifiedClickMessage(const char* type);
106 111
107protected: 112protected:
@@ -154,7 +159,7 @@ protected:
154 LLTextEditor* mDescEditor; 159 LLTextEditor* mDescEditor;
155 LLLineEditor* mLocationEditor; 160 LLLineEditor* mLocationEditor;
156 LLComboBox* mCategoryCombo; 161 LLComboBox* mCategoryCombo;
157 LLCheckBoxCtrl* mMatureCheck; 162 LLComboBox* mMatureCombo;
158 LLCheckBoxCtrl* mAutoRenewCheck; 163 LLCheckBoxCtrl* mAutoRenewCheck;
159 164
160 LLButton* mUpdateBtn; 165 LLButton* mUpdateBtn;
diff --git a/linden/indra/newview/llpaneldirbrowser.cpp b/linden/indra/newview/llpaneldirbrowser.cpp
index 0d359d7..4d82023 100644
--- a/linden/indra/newview/llpaneldirbrowser.cpp
+++ b/linden/indra/newview/llpaneldirbrowser.cpp
@@ -600,84 +600,6 @@ void LLPanelDirBrowser::processDirPlacesReply(LLMessageSystem* msg, void**)
600} 600}
601 601
602 602
603
604void LLPanelDirBrowser::processDirPopularReply(LLMessageSystem *msg, void**)
605{
606 LLUUID agent_id;
607 LLUUID query_id;
608 LLUUID parcel_id;
609 char name[MAX_STRING]; /*Flawfinder: ignore*/
610 F32 dwell;
611
612 msg->getUUID("AgentData", "AgentID", agent_id);
613 msg->getUUID("QueryData", "QueryID", query_id );
614
615 LLPanelDirBrowser* self;
616 self = gDirBrowserInstances.getIfThere(query_id);
617 if (!self)
618 {
619 // data from an old query
620 return;
621 }
622
623 self->mHaveSearchResults = TRUE;
624
625 LLCtrlListInterface *list = self->childGetListInterface("results");
626 if (!list) return;
627
628 if (!list->getCanSelect())
629 {
630 list->operateOnAll(LLCtrlListInterface::OP_DELETE);
631 self->mResultsContents = LLSD();
632 }
633
634 S32 i;
635 S32 count = msg->getNumberOfBlocks("QueryReplies");
636 self->mResultsReceived += count;
637 for (i = 0; i < count; i++)
638 {
639 msg->getUUID( "QueryReplies", "ParcelID", parcel_id, i);
640 msg->getString( "QueryReplies", "Name", MAX_STRING, name, i);
641 msg->getF32( "QueryReplies", "Dwell", dwell, i);
642
643 if (parcel_id.isNull())
644 {
645 continue;
646 }
647
648 LLSD content;
649 content["type"] = POPULAR_CODE;
650 content["name"] = name;
651
652 LLSD row;
653 row["id"] = parcel_id;
654
655 row["columns"][0]["column"] = "icon";
656 row["columns"][0]["type"] = "icon";
657 row["columns"][0]["value"] = "icon_popular.tga";
658
659 row["columns"][1]["column"] = "name";
660 row["columns"][1]["value"] = name;
661 row["columns"][1]["font"] = "SANSSERIF";
662
663 LLString buffer = llformat("%.0f", dwell);
664 row["columns"][2]["column"] = "dwell";
665 row["columns"][2]["value"] = buffer;
666 row["columns"][2]["font"] = "SANSSERIFSMALL";
667
668 list->addElement(row);
669 self->mResultsContents[parcel_id.asString()] = content;
670 }
671
672 list->sortByColumn(self->mCurrentSortColumn, self->mCurrentSortAscending);
673 self->updateResultCount();
674
675 // Poke the result received timer
676 self->mLastResultTimer.reset();
677 self->mDidAutoSelect = FALSE;
678}
679
680
681void LLPanelDirBrowser::processDirEventsReply(LLMessageSystem* msg, void**) 603void LLPanelDirBrowser::processDirEventsReply(LLMessageSystem* msg, void**)
682{ 604{
683 LLUUID agent_id; 605 LLUUID agent_id;
diff --git a/linden/indra/newview/llpaneldirbrowser.h b/linden/indra/newview/llpaneldirbrowser.h
index 1f0e879..46d1369 100644
--- a/linden/indra/newview/llpaneldirbrowser.h
+++ b/linden/indra/newview/llpaneldirbrowser.h
@@ -116,7 +116,6 @@ public:
116 static void processDirEventsReply(LLMessageSystem* msg, void**); 116 static void processDirEventsReply(LLMessageSystem* msg, void**);
117 static void processDirGroupsReply(LLMessageSystem* msg, void**); 117 static void processDirGroupsReply(LLMessageSystem* msg, void**);
118 static void processDirClassifiedReply(LLMessageSystem* msg, void**); 118 static void processDirClassifiedReply(LLMessageSystem* msg, void**);
119 static void processDirPopularReply(LLMessageSystem* msg, void**);
120 static void processDirLandReply(LLMessageSystem *msg, void**); 119 static void processDirLandReply(LLMessageSystem *msg, void**);
121 120
122 std::string filterShortWords( const std::string source_string, int shortest_word_length, bool& was_filtered ); 121 std::string filterShortWords( const std::string source_string, int shortest_word_length, bool& was_filtered );
diff --git a/linden/indra/newview/llpaneldirfind.cpp b/linden/indra/newview/llpaneldirfind.cpp
index dcda770..9bf71d9 100644
--- a/linden/indra/newview/llpaneldirfind.cpp
+++ b/linden/indra/newview/llpaneldirfind.cpp
@@ -68,48 +68,31 @@
68//--------------------------------------------------------------------------- 68//---------------------------------------------------------------------------
69 69
70class LLPanelDirFindAll 70class LLPanelDirFindAll
71: public LLPanelDirBrowser, 71: public LLPanelDirFind
72 public LLWebBrowserCtrlObserver
73{ 72{
74public: 73public:
75 LLPanelDirFindAll(const std::string& name, LLFloaterDirectory* floater); 74 LLPanelDirFindAll(const std::string& name, LLFloaterDirectory* floater);
76 /*virtual*/ ~LLPanelDirFindAll();
77 75
78 /*virtual*/ BOOL postBuild(); 76 /*Virtual*/ void search(const std::string& search_text);
79 /*virtual*/ void draw();
80
81 void search(const std::string& search_text);
82 void focus();
83 void navigateToDefaultPage();
84
85private:
86 static void onClickBack( void* data );
87 static void onClickForward( void* data );
88 static void onClickHome( void* data );
89 static void onClickSearch( void* data );
90 static void onCommitSearch(LLUICtrl*, void* data);
91
92 static std::string getSearchURLSuffix(bool mature);
93
94 /*virtual*/ void onNavigateBegin( const EventType& eventIn );
95 /*virtual*/ void onNavigateComplete( const EventType& eventIn );
96 // Used to update progress indicator
97 /*virtual*/ void onLocationChange( const EventType& eventIn );
98 // Debugging info to console
99
100private:
101 LLWebBrowserCtrl* mWebBrowser;
102}; 77};
103 78
104
105LLPanelDirFindAll::LLPanelDirFindAll(const std::string& name, LLFloaterDirectory* floater) 79LLPanelDirFindAll::LLPanelDirFindAll(const std::string& name, LLFloaterDirectory* floater)
106: LLPanelDirBrowser(name, floater) 80: LLPanelDirFind(name, floater, "find_browser")
107 ,mWebBrowser(NULL) 81{
82}
83
84//---------------------------------------------------------------------------
85// LLPanelDirFind - Base class for all browser-based search tabs
86//---------------------------------------------------------------------------
87
88LLPanelDirFind::LLPanelDirFind(const std::string& name, LLFloaterDirectory* floater, const std::string& browser_name)
89: LLPanelDirBrowser(name, floater),
90 mWebBrowser(NULL),
91 mBrowserName(browser_name)
108{ 92{
109 mMinSearchChars = 3;
110} 93}
111 94
112BOOL LLPanelDirFindAll::postBuild() 95BOOL LLPanelDirFind::postBuild()
113{ 96{
114 LLPanelDirBrowser::postBuild(); 97 LLPanelDirBrowser::postBuild();
115 98
@@ -121,11 +104,15 @@ BOOL LLPanelDirFindAll::postBuild()
121 104
122 if (gAgent.isTeen()) 105 if (gAgent.isTeen())
123 { 106 {
124 childSetVisible("mature_check", false); 107 // Showcase tab does not have mature checkbox
125 childSetValue("mature_check", false); 108 if (hasChild("mature_check"))
109 {
110 childSetVisible("mature_check", false);
111 childSetValue("mature_check", false);
112 }
126 } 113 }
127 114
128 mWebBrowser = getChild<LLWebBrowserCtrl>("find_browser"); 115 mWebBrowser = getChild<LLWebBrowserCtrl>(mBrowserName);
129 if (mWebBrowser) 116 if (mWebBrowser)
130 { 117 {
131 // new pages appear in same window as the results page now 118 // new pages appear in same window as the results page now
@@ -147,14 +134,14 @@ BOOL LLPanelDirFindAll::postBuild()
147 return TRUE; 134 return TRUE;
148} 135}
149 136
150LLPanelDirFindAll::~LLPanelDirFindAll() 137LLPanelDirFind::~LLPanelDirFind()
151{ 138{
152 if (mWebBrowser) 139 if (mWebBrowser)
153 mWebBrowser->remObserver(this); 140 mWebBrowser->remObserver(this);
154} 141}
155 142
156// virtual 143// virtual
157void LLPanelDirFindAll::draw() 144void LLPanelDirFind::draw()
158{ 145{
159 // enable/disable buttons depending on state 146 // enable/disable buttons depending on state
160 if ( mWebBrowser ) 147 if ( mWebBrowser )
@@ -169,46 +156,25 @@ void LLPanelDirFindAll::draw()
169 LLPanelDirBrowser::draw(); 156 LLPanelDirBrowser::draw();
170} 157}
171 158
159// When we show any browser-based view, we want to hide all
160// the right-side XUI detail panels.
161// virtual
162void LLPanelDirFind::onVisibilityChange(BOOL new_visibility)
163{
164 if (new_visibility)
165 {
166 mFloaterDirectory->hideAllDetailPanels();
167 }
168 LLPanel::onVisibilityChange(new_visibility);
169}
170
172void LLPanelDirFindAll::search(const std::string& search_text) 171void LLPanelDirFindAll::search(const std::string& search_text)
173{ 172{
174 if (!search_text.empty()) 173 if (!search_text.empty())
175 { 174 {
176 // Replace spaces with "+" for use by Google search appliance
177 // Yes, this actually works for double-spaces
178 // " foo bar" becomes "+foo++bar" and works fine. JC
179 std::string search_text_with_plus = search_text;
180 std::string::iterator it = search_text_with_plus.begin();
181 for ( ; it != search_text_with_plus.end(); ++it )
182 {
183 if ( std::isspace( *it ) )
184 {
185 *it = '+';
186 }
187 }
188
189 // Our own special set of allowed chars (RFC1738 http://www.ietf.org/rfc/rfc1738.txt)
190 // Note that "+" is one of them, so we can do "+" addition first.
191 const char* allowed =
192 "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"
193 "0123456789"
194 "-._~$+!*'()";
195 std::string query = LLURI::escape(search_text_with_plus, allowed);
196
197 std::string url = gSavedSettings.getString("SearchURLQuery");
198 std::string substring = "[QUERY]";
199 url.replace(url.find(substring), substring.length(), query);
200
201 // replace the collection name with the one selected from the combo box
202 std::string selected_collection = childGetValue( "Category" ).asString();
203 substring = "[COLLECTION]";
204 url.replace(url.find(substring), substring.length(), selected_collection);
205
206 // Add common parameters (mature, teen, location)
207 bool mature = childGetValue( "mature_check" ).asBoolean(); 175 bool mature = childGetValue( "mature_check" ).asBoolean();
208 url += getSearchURLSuffix(mature); 176 std::string selected_collection = childGetValue( "Category" ).asString();
209 177 std::string url = buildSearchURL(search_text, selected_collection, mature);
210 llinfos << "url " << url << llendl;
211
212 if (mWebBrowser) 178 if (mWebBrowser)
213 { 179 {
214 mWebBrowser->navigateTo(url); 180 mWebBrowser->navigateTo(url);
@@ -223,14 +189,14 @@ void LLPanelDirFindAll::search(const std::string& search_text)
223 childSetText("search_editor", search_text); 189 childSetText("search_editor", search_text);
224} 190}
225 191
226void LLPanelDirFindAll::focus() 192void LLPanelDirFind::focus()
227{ 193{
228 childSetFocus("search_editor"); 194 childSetFocus("search_editor");
229} 195}
230 196
231void LLPanelDirFindAll::navigateToDefaultPage() 197void LLPanelDirFind::navigateToDefaultPage()
232{ 198{
233 std::string start_url = gSavedSettings.getString("SearchURLDefault"); 199 std::string start_url = getString("default_search_page");
234 bool mature = childGetValue( "mature_check" ).asBoolean(); 200 bool mature = childGetValue( "mature_check" ).asBoolean();
235 start_url += getSearchURLSuffix( mature ); 201 start_url += getSearchURLSuffix( mature );
236 202
@@ -241,9 +207,49 @@ void LLPanelDirFindAll::navigateToDefaultPage()
241 mWebBrowser->navigateTo( start_url ); 207 mWebBrowser->navigateTo( start_url );
242 } 208 }
243} 209}
210// static
211std::string LLPanelDirFind::buildSearchURL(const std::string& search_text, const std::string& collection, bool mature_in)
212{
213 std::string url = gSavedSettings.getString("SearchURLDefault");
214 if (!search_text.empty())
215 {
216 // Replace spaces with "+" for use by Google search appliance
217 // Yes, this actually works for double-spaces
218 // " foo bar" becomes "+foo++bar" and works fine. JC
219 std::string search_text_with_plus = search_text;
220 std::string::iterator it = search_text_with_plus.begin();
221 for ( ; it != search_text_with_plus.end(); ++it )
222 {
223 if ( std::isspace( *it ) )
224 {
225 *it = '+';
226 }
227 }
228
229 // Our own special set of allowed chars (RFC1738 http://www.ietf.org/rfc/rfc1738.txt)
230 // Note that "+" is one of them, so we can do "+" addition first.
231 const char* allowed =
232 "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"
233 "0123456789"
234 "-._~$+!*'()";
235 std::string query = LLURI::escape(search_text_with_plus, allowed);
236
237 url = gSavedSettings.getString("SearchURLQuery");
238 std::string substring = "[QUERY]";
239 url.replace(url.find(substring), substring.length(), query);
240
241 // replace the collection name with the one selected from the combo box
242 // std::string selected_collection = childGetValue( "Category" ).asString();
243 substring = "[COLLECTION]";
244 url.replace(url.find(substring), substring.length(), collection);
244 245
246 llinfos << "url " << url << llendl;
247 }
248 url += getSearchURLSuffix( mature_in );
249 return url;
250}
245// static 251// static
246std::string LLPanelDirFindAll::getSearchURLSuffix(bool mature_in) 252std::string LLPanelDirFind::getSearchURLSuffix(bool mature_in)
247{ 253{
248 bool mature = mature_in; 254 bool mature = mature_in;
249 // Teens never get mature results. Explicitly override because 255 // Teens never get mature results. Explicitly override because
@@ -314,9 +320,9 @@ std::string LLPanelDirFindAll::getSearchURLSuffix(bool mature_in)
314 320
315 321
316// static 322// static
317void LLPanelDirFindAll::onClickBack( void* data ) 323void LLPanelDirFind::onClickBack( void* data )
318{ 324{
319 LLPanelDirFindAll* self = ( LLPanelDirFindAll* )data; 325 LLPanelDirFind* self = ( LLPanelDirFind* )data;
320 if ( self->mWebBrowser ) 326 if ( self->mWebBrowser )
321 { 327 {
322 self->mWebBrowser->navigateBack(); 328 self->mWebBrowser->navigateBack();
@@ -324,9 +330,9 @@ void LLPanelDirFindAll::onClickBack( void* data )
324} 330}
325 331
326// static 332// static
327void LLPanelDirFindAll::onClickForward( void* data ) 333void LLPanelDirFind::onClickForward( void* data )
328{ 334{
329 LLPanelDirFindAll* self = ( LLPanelDirFindAll* )data; 335 LLPanelDirFind* self = ( LLPanelDirFind* )data;
330 if ( self->mWebBrowser ) 336 if ( self->mWebBrowser )
331 { 337 {
332 self->mWebBrowser->navigateForward(); 338 self->mWebBrowser->navigateForward();
@@ -334,9 +340,9 @@ void LLPanelDirFindAll::onClickForward( void* data )
334} 340}
335 341
336// static 342// static
337void LLPanelDirFindAll::onClickHome( void* data ) 343void LLPanelDirFind::onClickHome( void* data )
338{ 344{
339 LLPanelDirFindAll* self = ( LLPanelDirFindAll* )data; 345 LLPanelDirFind* self = ( LLPanelDirFind* )data;
340 if ( self->mWebBrowser ) 346 if ( self->mWebBrowser )
341 { 347 {
342 self->mWebBrowser->navigateHome(); 348 self->mWebBrowser->navigateHome();
@@ -344,32 +350,32 @@ void LLPanelDirFindAll::onClickHome( void* data )
344} 350}
345 351
346// static 352// static
347void LLPanelDirFindAll::onCommitSearch(LLUICtrl*, void* data) 353void LLPanelDirFind::onCommitSearch(LLUICtrl*, void* data)
348{ 354{
349 onClickSearch(data); 355 onClickSearch(data);
350} 356}
351 357
352// static 358// static
353void LLPanelDirFindAll::onClickSearch(void* data) 359void LLPanelDirFind::onClickSearch(void* data)
354{ 360{
355 LLPanelDirFindAll* self = ( LLPanelDirFindAll* )data; 361 LLPanelDirFind* self = ( LLPanelDirFind* )data;
356 LLString search_text = self->childGetText("search_editor"); 362 LLString search_text = self->childGetText("search_editor");
357 self->search(search_text); 363 self->search(search_text);
358 364
359 LLFloaterDirectory::sNewSearchCount++; 365 LLFloaterDirectory::sNewSearchCount++;
360} 366}
361 367
362void LLPanelDirFindAll::onNavigateBegin( const EventType& eventIn ) 368void LLPanelDirFind::onNavigateBegin( const EventType& eventIn )
363{ 369{
364 childSetText("status_text", getString("loading_text")); 370 childSetText("status_text", getString("loading_text"));
365} 371}
366 372
367void LLPanelDirFindAll::onNavigateComplete( const EventType& eventIn ) 373void LLPanelDirFind::onNavigateComplete( const EventType& eventIn )
368{ 374{
369 childSetText("status_text", getString("done_text")); 375 childSetText("status_text", getString("done_text"));
370} 376}
371 377
372void LLPanelDirFindAll::onLocationChange( const EventType& eventIn ) 378void LLPanelDirFind::onLocationChange( const EventType& eventIn )
373{ 379{
374 llinfos << eventIn.getStringValue() << llendl; 380 llinfos << eventIn.getStringValue() << llendl;
375} 381}
@@ -397,121 +403,3 @@ void LLPanelDirFindAllInterface::focus(LLPanelDirFindAll* panel)
397 panel->focus(); 403 panel->focus();
398} 404}
399 405
400//---------------------------------------------------------------------------
401// LLPanelDirFindAllOld - deprecated if new Google search works out. JC
402//---------------------------------------------------------------------------
403
404LLPanelDirFindAllOld::LLPanelDirFindAllOld(const std::string& name, LLFloaterDirectory* floater)
405 : LLPanelDirBrowser(name, floater)
406{
407 mMinSearchChars = 3;
408}
409
410BOOL LLPanelDirFindAllOld::postBuild()
411{
412 LLPanelDirBrowser::postBuild();
413
414 childSetKeystrokeCallback("name", &LLPanelDirBrowser::onKeystrokeName, this);
415
416 childSetAction("Search", onClickSearch, this);
417 childDisable("Search");
418 setDefaultBtn( "Search" );
419
420 return TRUE;
421}
422
423LLPanelDirFindAllOld::~LLPanelDirFindAllOld()
424{
425 // Children all cleaned up by default view destructor.
426}
427
428// virtual
429void LLPanelDirFindAllOld::draw()
430{
431 // You only have a choice if you are mature
432 childSetVisible("incmature", !gAgent.isTeen());
433 childSetValue("incmature", gSavedSettings.getBOOL("ShowMatureFindAll"));
434
435 LLPanelDirBrowser::draw();
436}
437
438// static
439void LLPanelDirFindAllOld::onCommitScope(LLUICtrl* ctrl, void* data)
440{
441 LLPanelDirFindAllOld* self = (LLPanelDirFindAllOld*)data;
442 self->setFocus(TRUE);
443}
444
445// static
446void LLPanelDirFindAllOld::onClickSearch(void *userdata)
447{
448 LLPanelDirFindAllOld *self = (LLPanelDirFindAllOld *)userdata;
449
450 if (self->childGetValue("name").asString().length() < self->mMinSearchChars)
451 {
452 return;
453 };
454
455 self->setupNewSearch();
456
457 // Figure out scope
458 U32 scope = 0x0;
459 scope |= DFQ_PEOPLE; // people (not just online = 0x01 | 0x02)
460 // places handled below
461 scope |= DFQ_EVENTS; // events
462 scope |= DFQ_GROUPS; // groups
463
464 BOOL filter_mature = (!gSavedSettings.getBOOL("ShowMatureFindAll") ||
465 gAgent.isTeen() ||
466 !self->childGetValue("incmature").asBoolean() );
467
468 if ( filter_mature )
469 {
470 scope |= DFQ_PG_SIMS_ONLY;
471 scope |= DFQ_PG_EVENTS_ONLY;
472 scope |= DFQ_FILTER_MATURE;
473 scope |= DFQ_PG_PARCELS_ONLY;
474 }
475
476 // send the message
477 LLMessageSystem *msg = gMessageSystem;
478 S32 start_row = 0;
479 sendDirFindQuery(msg, self->mSearchID, self->childGetValue("name").asString(), scope, start_row);
480
481 // Also look up classified ads. JC 12/2005
482 BOOL filter_auto_renew = FALSE;
483 U32 classified_flags = pack_classified_flags(filter_mature, filter_auto_renew);
484 msg->newMessage("DirClassifiedQuery");
485 msg->nextBlock("AgentData");
486 msg->addUUID("AgentID", gAgent.getID());
487 msg->addUUID("SessionID", gAgent.getSessionID());
488 msg->nextBlock("QueryData");
489 msg->addUUID("QueryID", self->mSearchID);
490 msg->addString("QueryText", self->childGetValue("name").asString());
491 msg->addU32("QueryFlags", classified_flags);
492 msg->addU32("Category", 0); // all categories
493 msg->addS32("QueryStart", 0);
494 gAgent.sendReliableMessage();
495
496 // Need to use separate find places query because places are
497 // sent using the more compact DirPlacesReply message.
498 U32 query_flags = DFQ_DWELL_SORT;
499 if ( filter_mature )
500 {
501 query_flags |= DFQ_PG_SIMS_ONLY;
502 query_flags |= DFQ_PG_PARCELS_ONLY; // FWIW, currently DFQ_PG_PARCELS_ONLY is only supported
503 query_flags |= DFQ_FILTER_MATURE;
504 }
505 msg->newMessage("DirPlacesQuery");
506 msg->nextBlock("AgentData");
507 msg->addUUID("AgentID", gAgent.getID() );
508 msg->addUUID("SessionID", gAgent.getSessionID());
509 msg->nextBlock("QueryData");
510 msg->addUUID("QueryID", self->mSearchID );
511 msg->addString("QueryText", self->childGetValue("name").asString());
512 msg->addU32("QueryFlags", query_flags );
513 msg->addS32("QueryStart", 0 ); // Always get the first 100 when using find ALL
514 msg->addS8("Category", LLParcel::C_ANY);
515 msg->addString("SimName", NULL);
516 gAgent.sendReliableMessage();
517}
diff --git a/linden/indra/newview/llpaneldirfind.h b/linden/indra/newview/llpaneldirfind.h
index fdf95d7..2359d62 100644
--- a/linden/indra/newview/llpaneldirfind.h
+++ b/linden/indra/newview/llpaneldirfind.h
@@ -33,34 +33,62 @@
33#define LL_LLPANELDIRFIND_H 33#define LL_LLPANELDIRFIND_H
34 34
35#include "llpaneldirbrowser.h" 35#include "llpaneldirbrowser.h"
36#include "llwebbrowserctrl.h"
36 37
37class LLUICtrl; 38class LLUICtrl;
38class LLLineEditor; 39class LLLineEditor;
39class LLPanelDirFindAll; 40class LLPanelDirFindAll;
40class LLFloaterDirectory; 41class LLFloaterDirectory;
42class LLWebBrowserCtrlObserver;
41 43
42class LLPanelDirFindAllInterface 44// This class in an abstract base class for all new style search widgets. It contains a pointer to a web browser control
45//
46class LLPanelDirFind
47: public LLPanelDirBrowser,
48 public LLWebBrowserCtrlObserver
43{ 49{
44public: 50public:
45 static LLPanelDirFindAll* create(LLFloaterDirectory* floater); 51 LLPanelDirFind(const std::string& name, LLFloaterDirectory* floater, const std::string& browser_name);
46 static void search(LLPanelDirFindAll* panel, const std::string& search_text); 52 /*virtual*/ ~LLPanelDirFind();
47 static void focus(LLPanelDirFindAll* panel);
48};
49 53
54 /*virtual*/ void draw();
55 /*virtual*/ BOOL postBuild();
56 /*virtual*/ void onVisibilityChange(BOOL new_visibility);
50 57
51class LLPanelDirFindAllOld : public LLPanelDirBrowser 58 // Pure virtual. Must be implemented
52{ 59 virtual void search(const std::string& search_text) = 0;
53public:
54 LLPanelDirFindAllOld(const std::string& name, LLFloaterDirectory* floater);
55 /*virtual*/ ~LLPanelDirFindAllOld();
56 60
57 /*virtual*/ BOOL postBuild(); 61 virtual void navigateToDefaultPage();
62 void focus();
58 63
59 /*virtual*/ void draw(); 64 static std::string buildSearchURL(const std::string& search_text, const std::string& collection, bool mature_in);
65 static std::string getSearchURLSuffix(bool mature_in);
60 66
61 static void onClickSearch(void *userdata); 67private:
62 static void onCommitScope(LLUICtrl* ctrl, void* data); 68 static void onClickBack( void* data );
63 static void onKeystrokeName(LLLineEditor* line, void* data); 69 static void onClickForward( void* data );
70 static void onClickHome( void* data );
71 static void onClickSearch( void* data );
72 static void onCommitSearch(LLUICtrl*, void* data);
73
74 /*virtual*/ void onNavigateBegin( const EventType& eventIn );
75 /*virtual*/ void onNavigateComplete( const EventType& eventIn );
76
77 // Used to update progress indicator
78 /*virtual*/ void onLocationChange( const EventType& eventIn );
79 // Debugging info to console
80
81protected:
82 LLWebBrowserCtrl* mWebBrowser;
83 std::string mBrowserName;
84};
85
86class LLPanelDirFindAllInterface
87{
88public:
89 static LLPanelDirFindAll* create(LLFloaterDirectory* floater);
90 static void search(LLPanelDirFindAll* panel, const std::string& search_text);
91 static void focus(LLPanelDirFindAll* panel);
64}; 92};
65 93
66#endif 94#endif
diff --git a/linden/indra/newview/llpaneldirgroups.cpp b/linden/indra/newview/llpaneldirgroups.cpp
index 0a0a14d..b765e99 100644
--- a/linden/indra/newview/llpaneldirgroups.cpp
+++ b/linden/indra/newview/llpaneldirgroups.cpp
@@ -33,101 +33,31 @@
33 33
34#include "llpaneldirgroups.h" 34#include "llpaneldirgroups.h"
35 35
36// linden library includes 36#include "llwebbrowserctrl.h"
37#include "llagent.h"
38//#include "llfontgl.h"
39#include "message.h"
40#include "llqueryflags.h"
41#include "llviewercontrol.h"
42#include "llviewerwindow.h"
43
44// viewer project includes
45 37
46LLPanelDirGroups::LLPanelDirGroups(const std::string& name, LLFloaterDirectory* floater) 38LLPanelDirGroups::LLPanelDirGroups(const std::string& name, LLFloaterDirectory* floater)
47 : LLPanelDirBrowser(name, floater) 39 : LLPanelDirFind(name, floater, "groups_browser")
48{
49 mMinSearchChars = 3;
50}
51
52
53BOOL LLPanelDirGroups::postBuild()
54{ 40{
55 LLPanelDirBrowser::postBuild();
56
57 childSetKeystrokeCallback("name", &LLPanelDirBrowser::onKeystrokeName, this);
58
59 childSetAction("Search", &LLPanelDirBrowser::onClickSearchCore, this);
60 childDisable("Search");
61 setDefaultBtn( "Search" );
62
63 return TRUE;
64} 41}
65 42
66LLPanelDirGroups::~LLPanelDirGroups()
67{
68 // Children all cleaned up by default view destructor.
69}
70 43
71// virtual 44void LLPanelDirGroups::search(const std::string& search_text)
72void LLPanelDirGroups::draw()
73{ 45{
74 // You only have a choice if you are mature 46 if (!search_text.empty())
75 childSetVisible("incmature", !gAgent.isTeen());
76 childSetValue("incmature", gSavedSettings.getBOOL("ShowMatureGroups"));
77
78 LLPanelDirBrowser::draw();
79}
80
81
82// virtual
83void LLPanelDirGroups::performQuery()
84{
85 std::string group_name = childGetValue("name").asString();
86 if (group_name.length() < mMinSearchChars)
87 { 47 {
88 return; 48 bool mature = childGetValue( "mature_check" ).asBoolean();
49 std::string selected_collection = "Groups";
50 std::string url = buildSearchURL(search_text, selected_collection, mature);
51 if (mWebBrowser)
52 {
53 mWebBrowser->navigateTo(url);
54 }
89 } 55 }
90 56 else
91 // "hi " is three chars but not a long-enough search
92 std::string query_string = group_name;
93 LLString::trim( query_string );
94 bool query_was_filtered = (query_string != group_name);
95
96 // possible we threw away all the short words in the query so check length
97 if ( query_string.length() < mMinSearchChars )
98 {
99 gViewerWindow->alertXml("SeachFilteredOnShortWordsEmpty");
100 return;
101 };
102
103 // if we filtered something out, display a popup
104 if ( query_was_filtered )
105 { 57 {
106 LLString::format_map_t args; 58 // empty search text
107 args["[FINALQUERY]"] = query_string; 59 navigateToDefaultPage();
108 gViewerWindow->alertXml("SeachFilteredOnShortWords", args);
109 };
110
111 setupNewSearch();
112
113 // groups
114 U32 scope = DFQ_GROUPS;
115
116 // Check group mature filter.
117 if ( !gSavedSettings.getBOOL("ShowMatureGroups")
118 || gAgent.isTeen() )
119 {
120 scope |= DFQ_FILTER_MATURE;
121 } 60 }
122 61
123 mCurrentSortColumn = "score"; 62 childSetText("search_editor", search_text);
124 mCurrentSortAscending = FALSE;
125
126 // send the message
127 sendDirFindQuery(
128 gMessageSystem,
129 mSearchID,
130 query_string,
131 scope,
132 mSearchStart);
133} 63}
diff --git a/linden/indra/newview/llpaneldirgroups.h b/linden/indra/newview/llpaneldirgroups.h
index 4d44143..03608e2 100644
--- a/linden/indra/newview/llpaneldirgroups.h
+++ b/linden/indra/newview/llpaneldirgroups.h
@@ -32,21 +32,14 @@
32#ifndef LLPANELDIRGROUPS_H 32#ifndef LLPANELDIRGROUPS_H
33#define LLPANELDIRGROUPS_H 33#define LLPANELDIRGROUPS_H
34 34
35#include "llpaneldirbrowser.h" 35#include "llpaneldirfind.h"
36 36
37class LLPanelDirGroups : public LLPanelDirBrowser 37class LLPanelDirGroups : public LLPanelDirFind
38{ 38{
39public: 39public:
40 LLPanelDirGroups(const std::string& name, LLFloaterDirectory* floater); 40 LLPanelDirGroups(const std::string& name, LLFloaterDirectory* floater);
41 virtual ~LLPanelDirGroups();
42 41
43 /*virtual*/ void draw(); 42 /*virtual*/ void search(const std::string& search_text);
44
45 /*virtual*/ BOOL postBuild();
46
47 /*virtual*/ void performQuery();
48
49 static void onClickSearch(void *userdata);
50}; 43};
51 44
52#endif 45#endif
diff --git a/linden/indra/newview/llpaneldirplaces.cpp b/linden/indra/newview/llpaneldirplaces.cpp
index 3e79ec0..3980fb4 100644
--- a/linden/indra/newview/llpaneldirplaces.cpp
+++ b/linden/indra/newview/llpaneldirplaces.cpp
@@ -33,161 +33,37 @@
33 33
34#include "llpaneldirplaces.h" 34#include "llpaneldirplaces.h"
35 35
36// linden library includes 36#include "llwebbrowserctrl.h"
37#include "llfontgl.h"
38#include "message.h"
39#include "lldir.h"
40#include "llparcel.h"
41#include "llregionflags.h"
42#include "llqueryflags.h"
43
44// viewer project includes
45#include "llagent.h"
46#include "llbutton.h"
47#include "llcheckboxctrl.h"
48#include "llcombobox.h"
49#include "llfloaterdirectory.h"
50#include "lllineeditor.h"
51#include "llviewerwindow.h"
52#include "llpaneldirbrowser.h"
53#include "lltextbox.h"
54#include "lluiconstants.h"
55#include "llviewercontrol.h"
56#include "llviewermessage.h"
57#include "llworldmap.h"
58 37
59LLPanelDirPlaces::LLPanelDirPlaces(const std::string& name, LLFloaterDirectory* floater) 38LLPanelDirPlaces::LLPanelDirPlaces(const std::string& name, LLFloaterDirectory* floater)
60 : LLPanelDirBrowser(name, floater) 39: LLPanelDirFind(name, floater, "places_browser")
61{
62 mMinSearchChars = 3;
63}
64
65BOOL LLPanelDirPlaces::postBuild()
66{
67 LLPanelDirBrowser::postBuild();
68
69 childSetKeystrokeCallback("name", &LLPanelDirBrowser::onKeystrokeName, this);
70
71 childSetAction("Search", &LLPanelDirBrowser::onClickSearchCore, this);
72 childDisable("Search");
73
74 mCurrentSortColumn = "dwell";
75 mCurrentSortAscending = FALSE;
76
77 // Don't prepopulate the places list, as it hurts the database as of 2006-12-04. JC
78 // initialQuery();
79
80 return TRUE;
81}
82
83LLPanelDirPlaces::~LLPanelDirPlaces()
84{ 40{
85 // Children all cleaned up by default view destructor.
86} 41}
87 42
88 43
89// virtual 44void LLPanelDirPlaces::search(const std::string& search_text)
90void LLPanelDirPlaces::draw()
91{
92 // You only have a choice if you are mature
93 childSetVisible("incmature", !gAgent.isTeen());
94 childSetValue("incmature", gSavedSettings.getBOOL("ShowMatureSims"));
95
96 LLPanelDirBrowser::draw();
97}
98
99// virtual
100void LLPanelDirPlaces::performQuery()
101{ 45{
102 LLString place_name = childGetValue("name").asString(); 46 if (!search_text.empty())
103 if (place_name.length() < mMinSearchChars)
104 { 47 {
105 return; 48 bool mature = childGetValue( "mature_check" ).asBoolean();
106 } 49 std::string selected_collection = "Places";
107 50 std::string url = buildSearchURL(search_text, selected_collection, mature);
108 // "hi " is three chars but not a long-enough search 51 if (mWebBrowser)
109 std::string query_string = place_name; 52 {
110 LLString::trim( query_string ); 53 mWebBrowser->navigateTo(url);
111 bool query_was_filtered = (query_string != place_name); 54 }
112
113 // possible we threw away all the short words in the query so check length
114 if ( query_string.length() < mMinSearchChars )
115 {
116 gViewerWindow->alertXml("SeachFilteredOnShortWordsEmpty");
117 return;
118 };
119
120 // if we filtered something out, display a popup
121 if ( query_was_filtered )
122 {
123 LLString::format_map_t args;
124 args["[FINALQUERY]"] = query_string;
125 gViewerWindow->alertXml("SeachFilteredOnShortWords", args);
126 };
127
128 LLString catstring = childGetValue("Category").asString();
129
130 // Because LLParcel::C_ANY is -1, must do special check
131 S32 category = 0;
132 if (catstring == "any")
133 {
134 category = LLParcel::C_ANY;
135 } 55 }
136 else 56 else
137 { 57 {
138 category = LLParcel::getCategoryFromString(catstring.c_str()); 58 // empty search text
59 navigateToDefaultPage();
139 } 60 }
140 61
141 BOOL pg_only = !gSavedSettings.getBOOL("ShowMatureSims") 62 childSetText("search_editor", search_text);
142 || gAgent.isTeen();
143
144 queryCore(query_string, category, pg_only);
145} 63}
146 64
147void LLPanelDirPlaces::initialQuery() 65LLPanelDirPlaces::~LLPanelDirPlaces()
148{
149 // All Linden locations in PG/Mature sims, any name.
150 const BOOL pg_only = FALSE;
151 queryCore("", LLParcel::C_LINDEN, pg_only);
152}
153
154void LLPanelDirPlaces::queryCore(const LLString& name,
155 S32 category,
156 BOOL pg_only)
157{ 66{
158 setupNewSearch(); 67 // Children all cleaned up by default view destructor.
159
160 // send the message
161 U32 flags = 0x0;
162
163 if (pg_only)
164 {
165 flags |= DFQ_PG_PARCELS_ONLY;
166 }
167
168// JC: Sorting by dwell severely impacts the performance of the query.
169// Instead of sorting on the dataserver, we sort locally once the results
170// are received.
171// IW: Re-enabled dwell sort based on new 3-character minimum description
172// Hopefully we'll move to next-gen Find before this becomes a big problem
173
174 flags |= DFQ_DWELL_SORT;
175
176 LLMessageSystem* msg = gMessageSystem;
177
178 msg->newMessage("DirPlacesQuery");
179 msg->nextBlock("AgentData");
180 msg->addUUID("AgentID", gAgent.getID());
181 msg->addUUID("SessionID", gAgent.getSessionID());
182 msg->nextBlock("QueryData");
183 msg->addUUID("QueryID", getSearchID());
184 msg->addString("QueryText", name);
185 msg->addU32("QueryFlags", flags);
186 msg->addS8("Category", (S8)category);
187 // No longer support queries by region name, too many regions
188 // for combobox, no easy way to do autocomplete. JC
189 msg->addString("SimName", "");
190 msg->addS32Fast(_PREHASH_QueryStart,mSearchStart);
191 gAgent.sendReliableMessage();
192} 68}
193 69
diff --git a/linden/indra/newview/llpaneldirplaces.h b/linden/indra/newview/llpaneldirplaces.h
index 7bc2b08..4785f94 100644
--- a/linden/indra/newview/llpaneldirplaces.h
+++ b/linden/indra/newview/llpaneldirplaces.h
@@ -32,31 +32,17 @@
32#ifndef LL_LLPANELDIRPLACES_H 32#ifndef LL_LLPANELDIRPLACES_H
33#define LL_LLPANELDIRPLACES_H 33#define LL_LLPANELDIRPLACES_H
34 34
35#include "llpaneldirbrowser.h" 35#include "llpaneldirfind.h"
36 36
37// UI class forward declarations 37// UI class forward declarations
38class LLLineEditor;
39 38
40class LLPanelDirPlaces : public LLPanelDirBrowser 39class LLPanelDirPlaces : public LLPanelDirFind
41{ 40{
42public: 41public:
43 LLPanelDirPlaces(const std::string& name, LLFloaterDirectory* floater); 42 LLPanelDirPlaces(const std::string& name, LLFloaterDirectory* floater);
44 virtual ~LLPanelDirPlaces(); 43 virtual ~LLPanelDirPlaces();
45 44
46 /*virtual*/ void draw(); 45 /*virtual*/ void search(const std::string& search_text);
47 46
48 virtual BOOL postBuild();
49
50 static void onClickSearch(void *userdata);
51 static void onKeystrokeName(LLLineEditor* line, void* data);
52
53 void performQuery();
54
55 // Initially fill in some data for the panel.
56 void initialQuery();
57
58private:
59 void queryCore(const LLString& name, S32 category, BOOL pg_only);
60}; 47};
61
62#endif 48#endif
diff --git a/linden/indra/newview/llpaneldirpopular.cpp b/linden/indra/newview/llpaneldirpopular.cpp
index 5a94275..7cfc5b5 100644
--- a/linden/indra/newview/llpaneldirpopular.cpp
+++ b/linden/indra/newview/llpaneldirpopular.cpp
@@ -33,102 +33,15 @@
33 33
34#include "llpaneldirpopular.h" 34#include "llpaneldirpopular.h"
35 35
36// linden library includes
37#include "llfontgl.h"
38#include "message.h"
39#include "llqueryflags.h"
40
41// viewer project includes
42#include "llagent.h"
43#include "llcheckboxctrl.h"
44#include "llviewercontrol.h"
45#include "lluiconstants.h"
46#include "lltextbox.h"
47
48LLPanelDirPopular::LLPanelDirPopular(const std::string& name, LLFloaterDirectory* floater) 36LLPanelDirPopular::LLPanelDirPopular(const std::string& name, LLFloaterDirectory* floater)
49 : LLPanelDirBrowser(name, floater), 37: LLPanelDirFind(name, floater, "showcase_browser")
50 mRequested(false)
51{
52}
53
54BOOL LLPanelDirPopular::postBuild()
55{
56 LLPanelDirBrowser::postBuild();
57
58 childSetCommitCallback("incpictures", onCommitAny, this);
59 childSetCommitCallback("incmature", onCommitAny, this);
60
61 mCurrentSortColumn = "dwell";
62 mCurrentSortAscending = FALSE;
63
64 // Don't request popular until first drawn. JC
65 // requestPopular();
66
67 return TRUE;
68}
69
70LLPanelDirPopular::~LLPanelDirPopular()
71{ 38{
72 // Children all cleaned up by default view destructor. 39 // *NOTE: This is now the "Showcase" section
73} 40}
74 41
75
76// virtual 42// virtual
77void LLPanelDirPopular::draw() 43void LLPanelDirPopular::search(const std::string& search_text)
78{
79 // You only have a choice if you are mature]
80 childSetVisible("incmature", !gAgent.isTeen());
81 childSetValue("incmature", gSavedSettings.getBOOL("ShowMatureSims"));
82
83 LLPanelDirBrowser::draw();
84
85 if (!mRequested)
86 {
87 requestPopular();
88 mRequested = true;
89 }
90}
91
92
93void LLPanelDirPopular::requestPopular()
94{
95 LLMessageSystem* msg = gMessageSystem;
96 BOOL pg_only = !childGetValue("incmature").asBoolean() || gAgent.isTeen();
97 BOOL pictures_only = childGetValue("incpictures").asBoolean();
98
99 U32 flags = 0x0;
100 if (pg_only)
101 {
102 flags |= DFQ_PG_SIMS_ONLY;
103 }
104 if (pictures_only)
105 {
106 flags |= DFQ_PICTURES_ONLY;
107 }
108
109 setupNewSearch();
110
111 msg->newMessage("DirPopularQuery");
112 msg->nextBlock("AgentData");
113 msg->addUUID("AgentID", gAgent.getID());
114 msg->addUUID("SessionID", gAgent.getSessionID());
115 msg->nextBlock("QueryData");
116 msg->addUUID("QueryID", getSearchID());
117 msg->addU32("QueryFlags", flags);
118 gAgent.sendReliableMessage();
119}
120
121
122// static
123void LLPanelDirPopular::onClickSearch(void* data)
124{
125 LLPanelDirPopular* self = (LLPanelDirPopular*)data;
126 self->requestPopular();
127}
128
129// static
130void LLPanelDirPopular::onCommitAny(LLUICtrl* ctrl, void* data)
131{ 44{
132 LLPanelDirPopular* self = (LLPanelDirPopular*)data; 45 // no-op, initial page is loaded during construction and there
133 self->requestPopular(); 46 // is no search interface, just browse
134} 47}
diff --git a/linden/indra/newview/llpaneldirpopular.h b/linden/indra/newview/llpaneldirpopular.h
index c3f5de3..5f28ba0 100644
--- a/linden/indra/newview/llpaneldirpopular.h
+++ b/linden/indra/newview/llpaneldirpopular.h
@@ -32,29 +32,14 @@
32#ifndef LL_LLPANELDIRPOPULAR_H 32#ifndef LL_LLPANELDIRPOPULAR_H
33#define LL_LLPANELDIRPOPULAR_H 33#define LL_LLPANELDIRPOPULAR_H
34 34
35#include "llpaneldirbrowser.h" 35#include "llpaneldirfind.h"
36 36
37class LLUICtrl; 37class LLPanelDirPopular : public LLPanelDirFind
38
39class LLPanelDirPopular : public LLPanelDirBrowser
40{ 38{
41public: 39public:
42 LLPanelDirPopular(const std::string& name, LLFloaterDirectory* floater); 40 LLPanelDirPopular(const std::string& name, LLFloaterDirectory* floater);
43 virtual ~LLPanelDirPopular();
44
45 virtual void draw();
46
47 virtual BOOL postBuild();
48 41
49 void requestPopular(); 42 /*virtual*/ void search(const std::string& search_text);
50
51protected:
52 static void onClickSearch(void* data);
53 static void onCommitAny(LLUICtrl* ctrl, void* data);
54
55private:
56 bool mRequested;
57}; 43};
58 44
59
60#endif 45#endif
diff --git a/linden/indra/newview/llpaneldisplay.cpp b/linden/indra/newview/llpaneldisplay.cpp
index e5072c5..cc70f79 100644
--- a/linden/indra/newview/llpaneldisplay.cpp
+++ b/linden/indra/newview/llpaneldisplay.cpp
@@ -82,6 +82,8 @@
82// parent 82// parent
83#include "llfloaterpreference.h" 83#include "llfloaterpreference.h"
84 84
85#include <boost/regex.hpp>
86
85const F32 MAX_USER_FAR_CLIP = 512.f; 87const F32 MAX_USER_FAR_CLIP = 512.f;
86const F32 MIN_USER_FAR_CLIP = 64.f; 88const F32 MIN_USER_FAR_CLIP = 64.f;
87 89
@@ -164,6 +166,8 @@ BOOL LLPanelDisplay::postBuild()
164 } 166 }
165 } 167 }
166 168
169 initWindowSizeControls();
170
167 if (gSavedSettings.getBOOL("FullScreenAutoDetectAspectRatio")) 171 if (gSavedSettings.getBOOL("FullScreenAutoDetectAspectRatio"))
168 { 172 {
169 mAspectRatio = gViewerWindow->getDisplayAspectRatio(); 173 mAspectRatio = gViewerWindow->getDisplayAspectRatio();
@@ -319,6 +323,36 @@ BOOL LLPanelDisplay::postBuild()
319 return TRUE; 323 return TRUE;
320} 324}
321 325
326void LLPanelDisplay::initWindowSizeControls()
327{
328 // Window size
329 mWindowSizeLabel = getChild<LLTextBox>("WindowSizeLabel");
330 mCtrlWindowSize = getChild<LLComboBox>("windowsize combo");
331
332 // Look to see if current window size matches existing window sizes, if so then
333 // just set the selection value...
334 const U32 height = gViewerWindow->getWindowDisplayHeight();
335 const U32 width = gViewerWindow->getWindowDisplayWidth();
336 for (S32 i=0; i < mCtrlWindowSize->getItemCount(); i++)
337 {
338 U32 height_test = 0;
339 U32 width_test = 0;
340 mCtrlWindowSize->setCurrentByIndex(i);
341 if (extractWindowSizeFromString(mCtrlWindowSize->getValue().asString().c_str(), width_test, height_test))
342 {
343 if ((height_test == height) && (width_test == width))
344 {
345 return;
346 }
347 }
348 }
349 // ...otherwise, add a new entry with the current window height/width.
350 LLUIString resolution_label = getUIString("resolution_format");
351 resolution_label.setArg("[RES_X]", llformat("%d", width));
352 resolution_label.setArg("[RES_Y]", llformat("%d", height));
353 mCtrlWindowSize->add(resolution_label, ADD_TOP);
354 mCtrlWindowSize->setCurrentByIndex(0);
355}
322 356
323LLPanelDisplay::~LLPanelDisplay() 357LLPanelDisplay::~LLPanelDisplay()
324{ 358{
@@ -327,6 +361,10 @@ LLPanelDisplay::~LLPanelDisplay()
327 { 361 {
328 mCtrlAspectRatio->setCurrentByIndex(i); 362 mCtrlAspectRatio->setCurrentByIndex(i);
329 } 363 }
364 for (S32 i = 0; i < mCtrlWindowSize->getItemCount(); i++)
365 {
366 mCtrlWindowSize->setCurrentByIndex(i);
367 }
330} 368}
331 369
332void LLPanelDisplay::refresh() 370void LLPanelDisplay::refresh()
@@ -392,6 +430,7 @@ void LLPanelDisplay::refreshEnabledState()
392 mAspectRatioLabel1->setVisible(isFullScreen); 430 mAspectRatioLabel1->setVisible(isFullScreen);
393 mCtrlAutoDetectAspect->setVisible(isFullScreen); 431 mCtrlAutoDetectAspect->setVisible(isFullScreen);
394 mFullScreenInfo->setVisible(!isFullScreen); 432 mFullScreenInfo->setVisible(!isFullScreen);
433 mWindowSizeLabel->setVisible(!isFullScreen);
395 434
396 // disable graphics settings and exit if it's not set to custom 435 // disable graphics settings and exit if it's not set to custom
397 if(!gSavedSettings.getBOOL("RenderCustomSettings")) 436 if(!gSavedSettings.getBOOL("RenderCustomSettings"))
@@ -656,6 +695,12 @@ void LLPanelDisplay::cancel()
656void LLPanelDisplay::apply() 695void LLPanelDisplay::apply()
657{ 696{
658 applyResolution(); 697 applyResolution();
698
699 // Only set window size if we're not in fullscreen mode
700 if (mCtrlWindowed->get())
701 {
702 applyWindowSize();
703 }
659} 704}
660 705
661void LLPanelDisplay::onChangeQuality(LLUICtrl *ctrl, void *data) 706void LLPanelDisplay::onChangeQuality(LLUICtrl *ctrl, void *data)
@@ -712,7 +757,7 @@ void LLPanelDisplay::applyResolution()
712 if (mCtrlAspectRatio->getCurrentIndex() == -1) 757 if (mCtrlAspectRatio->getCurrentIndex() == -1)
713 { 758 {
714 strncpy(aspect_ratio_text, mCtrlAspectRatio->getSimple().c_str(), sizeof(aspect_ratio_text) -1); /*Flawfinder: ignore*/ 759 strncpy(aspect_ratio_text, mCtrlAspectRatio->getSimple().c_str(), sizeof(aspect_ratio_text) -1); /*Flawfinder: ignore*/
715 aspect_ratio_text[sizeof(aspect_ratio_text) -1] = '\0'; 760 aspect_ratio_text[sizeof(aspect_ratio_text) -1] = '\0';
716 char *element = strtok(aspect_ratio_text, ":/\\"); 761 char *element = strtok(aspect_ratio_text, ":/\\");
717 if (!element) 762 if (!element)
718 { 763 {
@@ -817,6 +862,36 @@ void LLPanelDisplay::applyResolution()
817 refresh(); 862 refresh();
818} 863}
819 864
865// Extract from strings of the form "<width> x <height>", e.g. "640 x 480".
866bool LLPanelDisplay::extractWindowSizeFromString(const char *sInput, U32 &width, U32 &height)
867{
868 using namespace boost;
869 cmatch what;
870 const regex expression("([0-9]+) x ([0-9]+)");
871 if (regex_match(sInput, what, expression))
872 {
873 width = atoi(what[1].first);
874 height = atoi(what[2].first);
875 return true;
876 }
877
878 width = height = 0;
879 return false;
880}
881
882void LLPanelDisplay::applyWindowSize()
883{
884 if (mCtrlWindowSize->getVisible() && (mCtrlWindowSize->getCurrentIndex() != -1))
885 {
886 U32 width = 0;
887 U32 height = 0;
888 if (extractWindowSizeFromString(mCtrlWindowSize->getValue().asString().c_str(), width,height))
889 {
890 LLViewerWindow::movieSize(width, height);
891 }
892 }
893}
894
820//static 895//static
821void LLPanelDisplay::onCommitWindowedMode(LLUICtrl* ctrl, void *data) 896void LLPanelDisplay::onCommitWindowedMode(LLUICtrl* ctrl, void *data)
822{ 897{
diff --git a/linden/indra/newview/llpaneldisplay.h b/linden/indra/newview/llpaneldisplay.h
index cc39f93..e100a18 100644
--- a/linden/indra/newview/llpaneldisplay.h
+++ b/linden/indra/newview/llpaneldisplay.h
@@ -33,7 +33,7 @@
33#define LL_LLPANELDISPLAY_H 33#define LL_LLPANELDISPLAY_H
34 34
35#include "llpanel.h" 35#include "llpanel.h"
36 36#include "llwindow.h"
37#include "llcontrol.h" 37#include "llcontrol.h"
38 38
39class LLSlider; 39class LLSlider;
@@ -72,15 +72,21 @@ public:
72 void setHiddenGraphicsState(bool isHidden); 72 void setHiddenGraphicsState(bool isHidden);
73 void apply(); // Apply the changed values. 73 void apply(); // Apply the changed values.
74 void applyResolution(); 74 void applyResolution();
75 void applyWindowSize();
75 void cancel(); 76 void cancel();
76 77
77protected: 78protected:
79 void initWindowSizeControls();
80 bool extractWindowSizeFromString(const char *sInput, U32 &width, U32 &height);
81
78 // aspect ratio sliders and boxes 82 // aspect ratio sliders and boxes
79 LLComboBox *mCtrlFullScreen; // Fullscreen resolution 83 LLComboBox *mCtrlFullScreen; // Fullscreen resolution
80 LLCheckBoxCtrl *mCtrlWindowed; // windowed mode
81 LLCheckBoxCtrl *mCtrlAutoDetectAspect; // automatically detect aspect ratio 84 LLCheckBoxCtrl *mCtrlAutoDetectAspect; // automatically detect aspect ratio
82 LLComboBox *mCtrlAspectRatio; // user provided aspect ratio 85 LLComboBox *mCtrlAspectRatio; // user provided aspect ratio
83 86
87 LLCheckBoxCtrl *mCtrlWindowed; // windowed mode
88 LLComboBox *mCtrlWindowSize; // window size for windowed mode
89
84 /// performance radio group 90 /// performance radio group
85 LLSliderCtrl *mCtrlSliderQuality; 91 LLSliderCtrl *mCtrlSliderQuality;
86 LLCheckBoxCtrl *mCtrlCustomSettings; 92 LLCheckBoxCtrl *mCtrlCustomSettings;
@@ -113,7 +119,8 @@ protected:
113 LLTextBox *mAspectRatioLabel1; 119 LLTextBox *mAspectRatioLabel1;
114 LLTextBox *mDisplayResLabel; 120 LLTextBox *mDisplayResLabel;
115 LLTextEditor *mFullScreenInfo; 121 LLTextEditor *mFullScreenInfo;
116 122 LLTextBox *mWindowSizeLabel;
123
117 LLTextBox *mShaderText; 124 LLTextBox *mShaderText;
118 LLTextBox *mReflectionText; 125 LLTextBox *mReflectionText;
119 LLTextBox *mAvatarText; 126 LLTextBox *mAvatarText;
diff --git a/linden/indra/newview/llpanelgroupgeneral.cpp b/linden/indra/newview/llpanelgroupgeneral.cpp
index 1709ad2..a7eac37 100644
--- a/linden/indra/newview/llpanelgroupgeneral.cpp
+++ b/linden/indra/newview/llpanelgroupgeneral.cpp
@@ -54,6 +54,11 @@
54#include "lltexturectrl.h" 54#include "lltexturectrl.h"
55#include "llviewerwindow.h" 55#include "llviewerwindow.h"
56 56
57// consts
58const S32 MATURE_CONTENT = 1;
59const S32 NON_MATURE_CONTENT = 2;
60const S32 DECLINE_TO_STATE = 0;
61
57// static 62// static
58void* LLPanelGroupGeneral::createTab(void* data) 63void* LLPanelGroupGeneral::createTab(void* data)
59{ 64{
@@ -76,7 +81,7 @@ LLPanelGroupGeneral::LLPanelGroupGeneral(const std::string& name,
76 mBtnJoinGroup(NULL), 81 mBtnJoinGroup(NULL),
77 mListVisibleMembers(NULL), 82 mListVisibleMembers(NULL),
78 mCtrlShowInGroupList(NULL), 83 mCtrlShowInGroupList(NULL),
79 mCtrlMature(NULL), 84 mComboMature(NULL),
80 mCtrlOpenEnrollment(NULL), 85 mCtrlOpenEnrollment(NULL),
81 mCtrlEnrollmentFee(NULL), 86 mCtrlEnrollmentFee(NULL),
82 mSpinEnrollmentFee(NULL), 87 mSpinEnrollmentFee(NULL),
@@ -156,14 +161,19 @@ BOOL LLPanelGroupGeneral::postBuild()
156 mCtrlShowInGroupList->setCallbackUserData(this); 161 mCtrlShowInGroupList->setCallbackUserData(this);
157 } 162 }
158 163
159 mCtrlMature = getChild<LLCheckBoxCtrl>("mature", recurse); 164 mComboMature = getChild<LLComboBox>("group_mature_check", recurse);
160 if (mCtrlMature) 165 if(mComboMature)
161 { 166 {
162 mCtrlMature->setCommitCallback(onCommitAny); 167 mComboMature->setCurrentByIndex(0);
163 mCtrlMature->setCallbackUserData(this); 168 mComboMature->setCommitCallback(onCommitAny);
164 mCtrlMature->setVisible( !gAgent.isTeen() ); 169 mComboMature->setCallbackUserData(this);
170 if (gAgent.isTeen())
171 {
172 // Teens don't get to set mature flag. JC
173 mComboMature->setVisible(FALSE);
174 mComboMature->setCurrentByIndex(NON_MATURE_CONTENT);
175 }
165 } 176 }
166
167 mCtrlOpenEnrollment = getChild<LLCheckBoxCtrl>("open_enrollement", recurse); 177 mCtrlOpenEnrollment = getChild<LLCheckBoxCtrl>("open_enrollement", recurse);
168 if (mCtrlOpenEnrollment) 178 if (mCtrlOpenEnrollment)
169 { 179 {
@@ -231,7 +241,7 @@ BOOL LLPanelGroupGeneral::postBuild()
231 mEditCharter->setEnabled(TRUE); 241 mEditCharter->setEnabled(TRUE);
232 242
233 mCtrlShowInGroupList->setEnabled(TRUE); 243 mCtrlShowInGroupList->setEnabled(TRUE);
234 mCtrlMature->setEnabled(TRUE); 244 mComboMature->setEnabled(TRUE);
235 mCtrlOpenEnrollment->setEnabled(TRUE); 245 mCtrlOpenEnrollment->setEnabled(TRUE);
236 mCtrlEnrollmentFee->setEnabled(TRUE); 246 mCtrlEnrollmentFee->setEnabled(TRUE);
237 mSpinEnrollmentFee->setEnabled(TRUE); 247 mSpinEnrollmentFee->setEnabled(TRUE);
@@ -429,6 +439,16 @@ bool LLPanelGroupGeneral::apply(LLString& mesg)
429 if (has_power_in_group || mGroupID.isNull()) 439 if (has_power_in_group || mGroupID.isNull())
430 { 440 {
431 llinfos << "LLPanelGroupGeneral::apply" << llendl; 441 llinfos << "LLPanelGroupGeneral::apply" << llendl;
442
443 // Check to make sure mature has been set
444 if(mComboMature->getCurrentIndex() == DECLINE_TO_STATE)
445 {
446 LLString::format_map_t args;
447 gViewerWindow->alertXml("SetGroupMature", &callbackConfirmMatureApply,
448 new LLHandle<LLPanel>(getHandle()));
449 return false;
450 }
451
432 if (mGroupID.isNull()) 452 if (mGroupID.isNull())
433 { 453 {
434 // Validate the group name length. 454 // Validate the group name length.
@@ -446,13 +466,12 @@ bool LLPanelGroupGeneral::apply(LLString& mesg)
446 LLString::format_map_t args; 466 LLString::format_map_t args;
447 args["[MESSAGE]"] = mConfirmGroupCreateStr; 467 args["[MESSAGE]"] = mConfirmGroupCreateStr;
448 gViewerWindow->alertXml("GenericAlertYesCancel", args, 468 gViewerWindow->alertXml("GenericAlertYesCancel", args,
449 createGroupCallback,new LLHandle<LLPanel>(getHandle())); 469 createGroupCallback, new LLHandle<LLPanel>(getHandle()) );
450 470
451 return false; 471 return false;
452 } 472 }
453 473
454 LLGroupMgrGroupData* gdatap = LLGroupMgr::getInstance()->getGroupData(mGroupID); 474 LLGroupMgrGroupData* gdatap = LLGroupMgr::getInstance()->getGroupData(mGroupID);
455
456 if (!gdatap) 475 if (!gdatap)
457 { 476 {
458 mesg = "No group data found for group "; 477 mesg = "No group data found for group ";
@@ -468,11 +487,12 @@ bool LLPanelGroupGeneral::apply(LLString& mesg)
468 { 487 {
469 if (mEditCharter) gdatap->mCharter = mEditCharter->getText(); 488 if (mEditCharter) gdatap->mCharter = mEditCharter->getText();
470 if (mInsignia) gdatap->mInsigniaID = mInsignia->getImageAssetID(); 489 if (mInsignia) gdatap->mInsigniaID = mInsignia->getImageAssetID();
471 if (mCtrlMature) 490 if (mComboMature)
472 { 491 {
473 if (!gAgent.isTeen()) 492 if (!gAgent.isTeen())
474 { 493 {
475 gdatap->mMaturePublish = mCtrlMature->get(); 494 gdatap->mMaturePublish =
495 mComboMature->getCurrentIndex() == MATURE_CONTENT;
476 } 496 }
477 else 497 else
478 { 498 {
@@ -523,6 +543,42 @@ void LLPanelGroupGeneral::cancel()
523 notifyObservers(); 543 notifyObservers();
524} 544}
525 545
546
547// static
548void LLPanelGroupGeneral::callbackConfirmMatureApply(S32 option, void* data)
549{
550 LLHandle<LLPanel>* handlep = (LLHandle<LLPanel>*)data;
551 LLPanelGroupGeneral* self = dynamic_cast<LLPanelGroupGeneral*>(handlep->get());
552 delete handlep;
553 if (self)
554 {
555 self->confirmMatureApply(option);
556 }
557}
558
559// invoked from callbackConfirmMature
560void LLPanelGroupGeneral::confirmMatureApply(S32 option)
561{
562 // 0 == Yes
563 // 1 == No
564 // 2 == Cancel
565 switch(option)
566 {
567 case 0:
568 mComboMature->setCurrentByIndex(MATURE_CONTENT);
569 break;
570 case 1:
571 mComboMature->setCurrentByIndex(NON_MATURE_CONTENT);
572 break;
573 default:
574 return;
575 }
576
577 // If we got here it means they set a valid value
578 LLString mesg = "";
579 apply(mesg);
580}
581
526// static 582// static
527void LLPanelGroupGeneral::createGroupCallback(S32 option, void* userdata) 583void LLPanelGroupGeneral::createGroupCallback(S32 option, void* userdata)
528{ 584{
@@ -547,7 +603,7 @@ void LLPanelGroupGeneral::createGroupCallback(S32 option, void* userdata)
547 enrollment_fee, 603 enrollment_fee,
548 self->mCtrlOpenEnrollment->get(), 604 self->mCtrlOpenEnrollment->get(),
549 false, 605 false,
550 self->mCtrlMature->get()); 606 self->mComboMature->getCurrentIndex() == MATURE_CONTENT);
551 607
552 } 608 }
553 break; 609 break;
@@ -632,11 +688,18 @@ void LLPanelGroupGeneral::update(LLGroupChange gc)
632 mCtrlShowInGroupList->set(gdatap->mShowInList); 688 mCtrlShowInGroupList->set(gdatap->mShowInList);
633 mCtrlShowInGroupList->setEnabled(mAllowEdit && can_change_ident); 689 mCtrlShowInGroupList->setEnabled(mAllowEdit && can_change_ident);
634 } 690 }
635 if (mCtrlMature) 691 if (mComboMature)
636 { 692 {
637 mCtrlMature->set(gdatap->mMaturePublish); 693 if(gdatap->mMaturePublish)
638 mCtrlMature->setEnabled(mAllowEdit && can_change_ident); 694 {
639 mCtrlMature->setVisible( !gAgent.isTeen() ); 695 mComboMature->setCurrentByIndex(MATURE_CONTENT);
696 }
697 else
698 {
699 mComboMature->setCurrentByIndex(NON_MATURE_CONTENT);
700 }
701 mComboMature->setEnabled(mAllowEdit && can_change_ident);
702 mComboMature->setVisible( !gAgent.isTeen() );
640 } 703 }
641 if (mCtrlOpenEnrollment) 704 if (mCtrlOpenEnrollment)
642 { 705 {
@@ -820,7 +883,7 @@ void LLPanelGroupGeneral::updateChanged()
820 mInsignia, 883 mInsignia,
821 mEditCharter, 884 mEditCharter,
822 mCtrlShowInGroupList, 885 mCtrlShowInGroupList,
823 mCtrlMature, 886 mComboMature,
824 mCtrlOpenEnrollment, 887 mCtrlOpenEnrollment,
825 mCtrlEnrollmentFee, 888 mCtrlEnrollmentFee,
826 mSpinEnrollmentFee, 889 mSpinEnrollmentFee,
diff --git a/linden/indra/newview/llpanelgroupgeneral.h b/linden/indra/newview/llpanelgroupgeneral.h
index daf7bfa..169fcff 100644
--- a/linden/indra/newview/llpanelgroupgeneral.h
+++ b/linden/indra/newview/llpanelgroupgeneral.h
@@ -58,6 +58,7 @@ public:
58 virtual bool apply(LLString& mesg); 58 virtual bool apply(LLString& mesg);
59 virtual void cancel(); 59 virtual void cancel();
60 static void createGroupCallback(S32 option, void* user_data); 60 static void createGroupCallback(S32 option, void* user_data);
61 static void callbackConfirmMatureApply(S32 option, void* data);
61 62
62 virtual void update(LLGroupChange gc); 63 virtual void update(LLGroupChange gc);
63 64
@@ -80,6 +81,7 @@ private:
80 81
81 void updateMembers(); 82 void updateMembers();
82 void updateChanged(); 83 void updateChanged();
84 void confirmMatureApply(S32 option);
83 85
84 BOOL mPendingMemberUpdate; 86 BOOL mPendingMemberUpdate;
85 BOOL mChanged; 87 BOOL mChanged;
@@ -101,7 +103,6 @@ private:
101 103
102 // Options (include any updates in updateChanged) 104 // Options (include any updates in updateChanged)
103 LLCheckBoxCtrl *mCtrlShowInGroupList; 105 LLCheckBoxCtrl *mCtrlShowInGroupList;
104 LLCheckBoxCtrl *mCtrlMature;
105 LLCheckBoxCtrl *mCtrlOpenEnrollment; 106 LLCheckBoxCtrl *mCtrlOpenEnrollment;
106 LLCheckBoxCtrl *mCtrlEnrollmentFee; 107 LLCheckBoxCtrl *mCtrlEnrollmentFee;
107 LLSpinCtrl *mSpinEnrollmentFee; 108 LLSpinCtrl *mSpinEnrollmentFee;
@@ -109,6 +110,7 @@ private:
109 LLCheckBoxCtrl *mCtrlListGroup; 110 LLCheckBoxCtrl *mCtrlListGroup;
110 LLTextBox *mActiveTitleLabel; 111 LLTextBox *mActiveTitleLabel;
111 LLComboBox *mComboActiveTitle; 112 LLComboBox *mComboActiveTitle;
113 LLComboBox *mComboMature;
112 114
113 LLGroupMgrGroupData::member_list_t::iterator mMemberProgress; 115 LLGroupMgrGroupData::member_list_t::iterator mMemberProgress;
114}; 116};
diff --git a/linden/indra/newview/llpanellogin.cpp b/linden/indra/newview/llpanellogin.cpp
index 9fcd73d..334e9f4 100644
--- a/linden/indra/newview/llpanellogin.cpp
+++ b/linden/indra/newview/llpanellogin.cpp
@@ -133,83 +133,77 @@ void LLLoginHandler::parse(const LLSD& queryMap)
133 mFirstName = queryMap["first_name"].asString(); 133 mFirstName = queryMap["first_name"].asString();
134 mLastName = queryMap["last_name"].asString(); 134 mLastName = queryMap["last_name"].asString();
135 135
136 EGridInfo grid_choice = GRID_INFO_NONE;
136 if (queryMap["grid"].asString() == "aditi") 137 if (queryMap["grid"].asString() == "aditi")
137 { 138 {
138 gGridChoice = GRID_INFO_ADITI; 139 grid_choice = GRID_INFO_ADITI;
139 } 140 }
140 else if (queryMap["grid"].asString() == "agni") 141 else if (queryMap["grid"].asString() == "agni")
141 { 142 {
142 gGridChoice = GRID_INFO_AGNI; 143 grid_choice = GRID_INFO_AGNI;
143 } 144 }
144 else if (queryMap["grid"].asString() == "siva") 145 else if (queryMap["grid"].asString() == "siva")
145 { 146 {
146 gGridChoice = GRID_INFO_SIVA; 147 grid_choice = GRID_INFO_SIVA;
147 } 148 }
148 else if (queryMap["grid"].asString() == "durga") 149 else if (queryMap["grid"].asString() == "durga")
149 { 150 {
150 gGridChoice = GRID_INFO_DURGA; 151 grid_choice = GRID_INFO_DURGA;
151 } 152 }
152 else if (queryMap["grid"].asString() == "shakti") 153 else if (queryMap["grid"].asString() == "shakti")
153 { 154 {
154 gGridChoice = GRID_INFO_SHAKTI; 155 grid_choice = GRID_INFO_SHAKTI;
155 } 156 }
156 else if (queryMap["grid"].asString() == "soma") 157 else if (queryMap["grid"].asString() == "soma")
157 { 158 {
158 gGridChoice = GRID_INFO_SOMA; 159 grid_choice = GRID_INFO_SOMA;
159 } 160 }
160 else if (queryMap["grid"].asString() == "ganga") 161 else if (queryMap["grid"].asString() == "ganga")
161 { 162 {
162 gGridChoice = GRID_INFO_GANGA; 163 grid_choice = GRID_INFO_GANGA;
163 } 164 }
164 else if (queryMap["grid"].asString() == "vaak") 165 else if (queryMap["grid"].asString() == "vaak")
165 { 166 {
166 gGridChoice = GRID_INFO_VAAK; 167 grid_choice = GRID_INFO_VAAK;
167 } 168 }
168 else if (queryMap["grid"].asString() == "uma") 169 else if (queryMap["grid"].asString() == "uma")
169 { 170 {
170 gGridChoice = GRID_INFO_UMA; 171 grid_choice = GRID_INFO_UMA;
171 } 172 }
172 else if (queryMap["grid"].asString() == "mohini") 173 else if (queryMap["grid"].asString() == "mohini")
173 { 174 {
174 gGridChoice = GRID_INFO_MOHINI; 175 grid_choice = GRID_INFO_MOHINI;
175 } 176 }
176 else if (queryMap["grid"].asString() == "yami") 177 else if (queryMap["grid"].asString() == "yami")
177 { 178 {
178 gGridChoice = GRID_INFO_YAMI; 179 grid_choice = GRID_INFO_YAMI;
179 } 180 }
180 else if (queryMap["grid"].asString() == "nandi") 181 else if (queryMap["grid"].asString() == "nandi")
181 { 182 {
182 gGridChoice = GRID_INFO_NANDI; 183 grid_choice = GRID_INFO_NANDI;
183 } 184 }
184 else if (queryMap["grid"].asString() == "mitra") 185 else if (queryMap["grid"].asString() == "mitra")
185 { 186 {
186 gGridChoice = GRID_INFO_MITRA; 187 grid_choice = GRID_INFO_MITRA;
187 } 188 }
188 else if (queryMap["grid"].asString() == "radha") 189 else if (queryMap["grid"].asString() == "radha")
189 { 190 {
190 gGridChoice = GRID_INFO_RADHA; 191 grid_choice = GRID_INFO_RADHA;
191 } 192 }
192 else if (queryMap["grid"].asString() == "ravi") 193 else if (queryMap["grid"].asString() == "ravi")
193 { 194 {
194 gGridChoice = GRID_INFO_RAVI; 195 grid_choice = GRID_INFO_RAVI;
195 } 196 }
196 else if (queryMap["grid"].asString() == "aruna") 197 else if (queryMap["grid"].asString() == "aruna")
197 { 198 {
198 gGridChoice = GRID_INFO_ARUNA; 199 grid_choice = GRID_INFO_ARUNA;
199 } 200 }
200#if !LL_RELEASE_FOR_DOWNLOAD 201
201 if (gGridChoice > GRID_INFO_NONE && gGridChoice < GRID_INFO_LOCAL) 202 if(grid_choice != GRID_INFO_NONE)
202 { 203 {
203 gSavedSettings.setS32("ServerChoice", gGridChoice); 204 LLViewerLogin::getInstance()->setGridChoice(grid_choice);
204 } 205 }
205#endif 206
206
207 if (LLAppViewer::instance()->getLoginURIs().size() == 0)
208 {
209 gGridName = gGridInfo[gGridChoice].mName; /* Flawfinder: ignore */
210 LLAppViewer::instance()->resetURIs();
211 }
212
213 LLString startLocation = queryMap["location"].asString(); 207 LLString startLocation = queryMap["location"].asString();
214 208
215 if (startLocation == "specify") 209 if (startLocation == "specify")
@@ -794,7 +788,7 @@ BOOL LLPanelLogin::getServer(LLString &server, S32 &domain_name)
794 788
795 if ((S32)GRID_INFO_OTHER == domain_name) 789 if ((S32)GRID_INFO_OTHER == domain_name)
796 { 790 {
797 server = gGridName; 791 server = LLViewerLogin::getInstance()->getGridLabel();
798 } 792 }
799 } 793 }
800 else 794 else
@@ -942,20 +936,9 @@ void LLPanelLogin::loadLoginPage()
942 LLString grid; 936 LLString grid;
943 S32 grid_index; 937 S32 grid_index;
944 getServer( grid, grid_index ); 938 getServer( grid, grid_index );
945 if( grid_index != (S32)GRID_INFO_OTHER )
946 {
947 grid = gGridInfo[grid_index].mLabel;
948 }
949 939
950 if(gGridChoice != (EGridInfo)grid_index) 940 gViewerWindow->setMenuBackgroundColor(false, !LLViewerLogin::getInstance()->isInProductionGrid());
951 { 941 gLoginMenuBarView->setBackgroundColor(gMenuBarView->getBackgroundColor());
952 LLAppViewer::instance()->resetURIs();
953 gGridChoice = (EGridInfo)grid_index;
954 gSavedSettings.setString("GridChoice", gGridInfo[gGridChoice].mLabel);
955 gViewerWindow->setMenuBackgroundColor(false,
956 !LLAppViewer::instance()->isInProductionGrid());
957 gLoginMenuBarView->setBackgroundColor(gMenuBarView->getBackgroundColor());
958 }
959 942
960 char* curl_grid = curl_escape(grid.c_str(), 0); 943 char* curl_grid = curl_escape(grid.c_str(), 0);
961 oStr << "&grid=" << curl_grid; 944 oStr << "&grid=" << curl_grid;
@@ -1087,15 +1070,6 @@ void LLPanelLogin::onClickConnect(void *)
1087 if (!first.empty() && !last.empty()) 1070 if (!first.empty() && !last.empty())
1088 { 1071 {
1089 // has both first and last name typed 1072 // has both first and last name typed
1090
1091 // store off custom server entry, if currently selected
1092 LLComboBox* combo = sInstance->getChild<LLComboBox>("server_combo");
1093 S32 selected_server = combo->getValue();
1094 if (selected_server == GRID_INFO_NONE)
1095 {
1096 LLString custom_server = combo->getValue().asString();
1097 gSavedSettings.setString("CustomServer", custom_server);
1098 }
1099 sInstance->mCallback(0, sInstance->mCallbackData); 1073 sInstance->mCallback(0, sInstance->mCallbackData);
1100 } 1074 }
1101 else 1075 else
@@ -1180,6 +1154,26 @@ void LLPanelLogin::onPassKey(LLLineEditor* caller, void* user_data)
1180// static 1154// static
1181void LLPanelLogin::onSelectServer(LLUICtrl*, void*) 1155void LLPanelLogin::onSelectServer(LLUICtrl*, void*)
1182{ 1156{
1157 // The user twiddled with the grid choice ui.
1158 // apply the selection to the grid setting.
1159 LLString grid;
1160 S32 grid_index;
1161 getServer( grid, grid_index );
1162
1163 // This new seelction will override preset uris
1164 // from the command line.
1165 LLViewerLogin* vl = LLViewerLogin::getInstance();
1166 vl->resetURIs();
1167 if(grid_index != GRID_INFO_OTHER)
1168 {
1169 vl->setGridChoice((EGridInfo)grid_index);
1170 grid = vl->getGridLabel();
1171 }
1172 else
1173 {
1174 vl->setGridChoice(grid);
1175 }
1176
1183 // grid changed so show new splash screen (possibly) 1177 // grid changed so show new splash screen (possibly)
1184 loadLoginPage(); 1178 loadLoginPage();
1185} 1179}
diff --git a/linden/indra/newview/llpanellogin.h b/linden/indra/newview/llpanellogin.h
index 1100cd6..cdf567b 100644
--- a/linden/indra/newview/llpanellogin.h
+++ b/linden/indra/newview/llpanellogin.h
@@ -68,6 +68,7 @@ class LLPanelLogin:
68 public LLPanel, 68 public LLPanel,
69 public LLWebBrowserCtrlObserver 69 public LLWebBrowserCtrlObserver
70{ 70{
71 LOG_CLASS(LLPanelLogin);
71public: 72public:
72 LLPanelLogin(const LLRect &rect, BOOL show_server, 73 LLPanelLogin(const LLRect &rect, BOOL show_server,
73 void (*callback)(S32 option, void* user_data), 74 void (*callback)(S32 option, void* user_data),
diff --git a/linden/indra/newview/llpanelpermissions.cpp b/linden/indra/newview/llpanelpermissions.cpp
index ea742ba..0d50f38 100644
--- a/linden/indra/newview/llpanelpermissions.cpp
+++ b/linden/indra/newview/llpanelpermissions.cpp
@@ -327,6 +327,7 @@ void LLPanelPermissions::refresh()
327 327
328 // update group text field 328 // update group text field
329 childSetEnabled("Group:",true); 329 childSetEnabled("Group:",true);
330 childSetText("Group Name",LLString::null);
330 LLUUID group_id; 331 LLUUID group_id;
331 BOOL groups_identical = LLSelectMgr::getInstance()->selectGetGroup(group_id); 332 BOOL groups_identical = LLSelectMgr::getInstance()->selectGetGroup(group_id);
332 if (groups_identical) 333 if (groups_identical)
@@ -337,6 +338,16 @@ void LLPanelPermissions::refresh()
337 mLabelGroupName->setEnabled(TRUE); 338 mLabelGroupName->setEnabled(TRUE);
338 } 339 }
339 } 340 }
341 else
342 {
343 if(mLabelGroupName)
344 {
345 mLabelGroupName->setNameID(LLUUID::null, TRUE);
346 mLabelGroupName->refresh(LLUUID::null, "", "", TRUE);
347 mLabelGroupName->setEnabled(FALSE);
348 }
349 }
350
340 childSetEnabled("button set group",owners_identical && (mOwnerID == gAgent.getID())); 351 childSetEnabled("button set group",owners_identical && (mOwnerID == gAgent.getID()));
341 352
342 // figure out the contents of the name, description, & category 353 // figure out the contents of the name, description, & category
@@ -854,7 +865,7 @@ void callback_deed_to_group(S32 option, void*)
854 { 865 {
855 LLUUID group_id; 866 LLUUID group_id;
856 BOOL groups_identical = LLSelectMgr::getInstance()->selectGetGroup(group_id); 867 BOOL groups_identical = LLSelectMgr::getInstance()->selectGetGroup(group_id);
857 if(groups_identical && (gAgent.hasPowerInGroup(group_id, GP_OBJECT_DEED))) 868 if(group_id.notNull() && groups_identical && (gAgent.hasPowerInGroup(group_id, GP_OBJECT_DEED)))
858 { 869 {
859 LLSelectMgr::getInstance()->sendOwner(LLUUID::null, group_id, FALSE); 870 LLSelectMgr::getInstance()->sendOwner(LLUUID::null, group_id, FALSE);
860// LLViewerStats::getInstance()->incStat(LLViewerStats::ST_RELEASE_COUNT); 871// LLViewerStats::getInstance()->incStat(LLViewerStats::ST_RELEASE_COUNT);
diff --git a/linden/indra/newview/llpolymesh.cpp b/linden/indra/newview/llpolymesh.cpp
index d74beeb..3884b31 100644
--- a/linden/indra/newview/llpolymesh.cpp
+++ b/linden/indra/newview/llpolymesh.cpp
@@ -271,7 +271,7 @@ BOOL LLPolyMeshSharedData::loadMesh( const char *fileName )
271 llerrs << "Filename is Empty!" << llendl; 271 llerrs << "Filename is Empty!" << llendl;
272 return FALSE; 272 return FALSE;
273 } 273 }
274 FILE* fp = LLFile::fopen(fileName, "rb"); /*Flawfinder: ignore*/ 274 LLFILE* fp = LLFile::fopen(fileName, "rb"); /*Flawfinder: ignore*/
275 if (!fp) 275 if (!fp)
276 { 276 {
277 llerrs << "can't open: " << fileName << llendl; 277 llerrs << "can't open: " << fileName << llendl;
diff --git a/linden/indra/newview/llpolymorph.cpp b/linden/indra/newview/llpolymorph.cpp
index a83f5ab..11ca7af 100644
--- a/linden/indra/newview/llpolymorph.cpp
+++ b/linden/indra/newview/llpolymorph.cpp
@@ -83,7 +83,7 @@ LLPolyMorphData::~LLPolyMorphData()
83//----------------------------------------------------------------------------- 83//-----------------------------------------------------------------------------
84// loadBinary() 84// loadBinary()
85//----------------------------------------------------------------------------- 85//-----------------------------------------------------------------------------
86BOOL LLPolyMorphData::loadBinary(FILE *fp, LLPolyMeshSharedData *mesh) 86BOOL LLPolyMorphData::loadBinary(LLFILE *fp, LLPolyMeshSharedData *mesh)
87{ 87{
88 S32 numVertices; 88 S32 numVertices;
89 S32 numRead; 89 S32 numRead;
diff --git a/linden/indra/newview/llpolymorph.h b/linden/indra/newview/llpolymorph.h
index 5f7a034..0ad5b18 100644
--- a/linden/indra/newview/llpolymorph.h
+++ b/linden/indra/newview/llpolymorph.h
@@ -51,7 +51,7 @@ public:
51 LLPolyMorphData(char *morph_name); 51 LLPolyMorphData(char *morph_name);
52 ~LLPolyMorphData(); 52 ~LLPolyMorphData();
53 53
54 BOOL loadBinary(FILE* fp, LLPolyMeshSharedData *mesh); 54 BOOL loadBinary(LLFILE* fp, LLPolyMeshSharedData *mesh);
55 char* loadASCII(char* text, LLPolyMeshSharedData *mesh); 55 char* loadASCII(char* text, LLPolyMeshSharedData *mesh);
56 char* getName() { return mName; } 56 char* getName() { return mName; }
57 57
diff --git a/linden/indra/newview/llpostprocess.cpp b/linden/indra/newview/llpostprocess.cpp
index c72b8ae..7ee7100 100644
--- a/linden/indra/newview/llpostprocess.cpp
+++ b/linden/indra/newview/llpostprocess.cpp
@@ -35,7 +35,7 @@
35#include "llpostprocess.h" 35#include "llpostprocess.h"
36#include "llglslshader.h" 36#include "llglslshader.h"
37#include "llsdserialize.h" 37#include "llsdserialize.h"
38#include "llglimmediate.h" 38#include "llrender.h"
39 39
40 40
41LLPostProcess * gPostProcess = NULL; 41LLPostProcess * gPostProcess = NULL;
@@ -59,7 +59,7 @@ LLPostProcess::LLPostProcess(void) :
59 screenW(1), screenH(1) 59 screenW(1), screenH(1)
60{ 60{
61 LLString pathName(gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS, "windlight", XML_FILENAME)); 61 LLString pathName(gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS, "windlight", XML_FILENAME));
62 llinfos << "Loading PostProcess Effects settings from " << pathName << llendl; 62 LL_DEBUGS2("AppInit", "Shaders") << "Loading PostProcess Effects settings from " << pathName << LL_ENDL;
63 63
64 llifstream effectsXML(pathName.c_str()); 64 llifstream effectsXML(pathName.c_str());
65 65
@@ -215,7 +215,7 @@ void LLPostProcess::applyColorFilterShader(void)
215{ 215{
216 gPostColorFilterProgram.bind(); 216 gPostColorFilterProgram.bind();
217 217
218 glActiveTextureARB(GL_TEXTURE0_ARB); 218 gGL.getTexUnit(0)->activate();
219 glEnable(GL_TEXTURE_RECTANGLE_ARB); 219 glEnable(GL_TEXTURE_RECTANGLE_ARB);
220 220
221 glBindTexture(GL_TEXTURE_RECTANGLE_ARB, sceneRenderTexture); 221 glBindTexture(GL_TEXTURE_RECTANGLE_ARB, sceneRenderTexture);
@@ -234,7 +234,7 @@ void LLPostProcess::applyColorFilterShader(void)
234 glUniform3fARB(colorFilterUniforms["lumWeights"], LUMINANCE_R, LUMINANCE_G, LUMINANCE_B); 234 glUniform3fARB(colorFilterUniforms["lumWeights"], LUMINANCE_R, LUMINANCE_G, LUMINANCE_B);
235 235
236 LLGLEnable blend(GL_BLEND); 236 LLGLEnable blend(GL_BLEND);
237 gGL.blendFunc(GL_ONE,GL_ZERO); 237 gGL.setSceneBlendType(LLRender::BT_REPLACE);
238 LLGLDepthTest depth(GL_FALSE); 238 LLGLDepthTest depth(GL_FALSE);
239 239
240 /// Draw a screen space quad 240 /// Draw a screen space quad
@@ -257,14 +257,14 @@ void LLPostProcess::applyNightVisionShader(void)
257{ 257{
258 gPostNightVisionProgram.bind(); 258 gPostNightVisionProgram.bind();
259 259
260 glActiveTextureARB(GL_TEXTURE0_ARB); 260 gGL.getTexUnit(0)->activate();
261 glEnable(GL_TEXTURE_RECTANGLE_ARB); 261 glEnable(GL_TEXTURE_RECTANGLE_ARB);
262 262
263 getShaderUniforms(nightVisionUniforms, gPostNightVisionProgram.mProgramObject); 263 getShaderUniforms(nightVisionUniforms, gPostNightVisionProgram.mProgramObject);
264 glBindTexture(GL_TEXTURE_RECTANGLE_ARB, sceneRenderTexture); 264 glBindTexture(GL_TEXTURE_RECTANGLE_ARB, sceneRenderTexture);
265 glUniform1iARB(nightVisionUniforms["RenderTexture"], 0); 265 glUniform1iARB(nightVisionUniforms["RenderTexture"], 0);
266 266
267 glActiveTextureARB(GL_TEXTURE1_ARB); 267 gGL.getTexUnit(1)->activate();
268 glEnable(GL_TEXTURE_2D); 268 glEnable(GL_TEXTURE_2D);
269 269
270 glBindTexture(GL_TEXTURE_2D, noiseTexture); 270 glBindTexture(GL_TEXTURE_2D, noiseTexture);
@@ -280,13 +280,13 @@ void LLPostProcess::applyNightVisionShader(void)
280 glUniform3fARB(nightVisionUniforms["lumWeights"], LUMINANCE_R, LUMINANCE_G, LUMINANCE_B); 280 glUniform3fARB(nightVisionUniforms["lumWeights"], LUMINANCE_R, LUMINANCE_G, LUMINANCE_B);
281 281
282 LLGLEnable blend(GL_BLEND); 282 LLGLEnable blend(GL_BLEND);
283 gGL.blendFunc(GL_ONE,GL_ZERO); 283 gGL.setSceneBlendType(LLRender::BT_REPLACE);
284 LLGLDepthTest depth(GL_FALSE); 284 LLGLDepthTest depth(GL_FALSE);
285 285
286 /// Draw a screen space quad 286 /// Draw a screen space quad
287 drawOrthoQuad(screenW, screenH, QUAD_NOISE); 287 drawOrthoQuad(screenW, screenH, QUAD_NOISE);
288 gPostNightVisionProgram.unbind(); 288 gPostNightVisionProgram.unbind();
289 glActiveTextureARB(GL_TEXTURE0_ARB); 289 gGL.getTexUnit(0)->activate();
290} 290}
291 291
292void LLPostProcess::createNightVisionShader(void) 292void LLPostProcess::createNightVisionShader(void)
@@ -352,7 +352,7 @@ void LLPostProcess::doEffects(void)
352 checkError(); 352 checkError();
353 applyShaders(); 353 applyShaders();
354 354
355 glUseProgramObjectARB(0); 355 LLGLSLShader::bindNoShader();
356 checkError(); 356 checkError();
357 357
358 /// Change to a perspective view 358 /// Change to a perspective view
@@ -565,74 +565,3 @@ void LLPostProcess::checkShaderError(GLhandleARB shader)
565 } 565 }
566 checkError(); // Check for OpenGL errors 566 checkError(); // Check for OpenGL errors
567} 567}
568
569void LLPostProcess::textureBlendReplace(void)
570{
571 glTexEnvi( GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE );
572 glTexEnvi( GL_TEXTURE_ENV, GL_COMBINE_RGB, GL_REPLACE );
573 glTexEnvi( GL_TEXTURE_ENV, GL_SOURCE0_RGB, GL_TEXTURE );
574 glTexEnvi( GL_TEXTURE_ENV, GL_OPERAND0_RGB, GL_SRC_COLOR );
575}
576
577void LLPostProcess::textureBlendAdd(void)
578{
579 glTexEnvi( GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE );
580 glTexEnvi( GL_TEXTURE_ENV, GL_COMBINE_RGB, GL_ADD );
581 glTexEnvi( GL_TEXTURE_ENV, GL_SOURCE0_RGB, GL_PREVIOUS );
582 glTexEnvi( GL_TEXTURE_ENV, GL_OPERAND0_RGB, GL_SRC_COLOR );
583 glTexEnvi( GL_TEXTURE_ENV, GL_SOURCE1_RGB, GL_TEXTURE );
584 glTexEnvi( GL_TEXTURE_ENV, GL_OPERAND1_RGB, GL_SRC_COLOR );
585}
586
587void LLPostProcess::textureBlendAddSigned(void)
588{
589 glTexEnvi( GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE );
590 glTexEnvi( GL_TEXTURE_ENV, GL_COMBINE_RGB, GL_ADD_SIGNED );
591 glTexEnvi( GL_TEXTURE_ENV, GL_SOURCE0_RGB, GL_PREVIOUS );
592 glTexEnvi( GL_TEXTURE_ENV, GL_OPERAND0_RGB, GL_SRC_COLOR );
593 glTexEnvi( GL_TEXTURE_ENV, GL_SOURCE1_RGB, GL_TEXTURE );
594 glTexEnvi( GL_TEXTURE_ENV, GL_OPERAND1_RGB, GL_SRC_COLOR );
595}
596
597void LLPostProcess::textureBlendSubtract(void)
598{
599 glTexEnvi( GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE );
600 glTexEnvi( GL_TEXTURE_ENV, GL_COMBINE_RGB, GL_SUBTRACT );
601 glTexEnvi( GL_TEXTURE_ENV, GL_SOURCE0_RGB, GL_PREVIOUS );
602 glTexEnvi( GL_TEXTURE_ENV, GL_OPERAND0_RGB, GL_SRC_COLOR );
603 glTexEnvi( GL_TEXTURE_ENV, GL_SOURCE1_RGB, GL_TEXTURE );
604 glTexEnvi( GL_TEXTURE_ENV, GL_OPERAND1_RGB, GL_SRC_COLOR );
605}
606
607void LLPostProcess::textureBlendAlpha(void)
608{
609 glTexEnvi( GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE );
610 glTexEnvi( GL_TEXTURE_ENV, GL_COMBINE_RGB, GL_INTERPOLATE );
611 glTexEnvi( GL_TEXTURE_ENV, GL_SOURCE0_RGB, GL_TEXTURE);
612 glTexEnvi( GL_TEXTURE_ENV, GL_OPERAND0_RGB, GL_SRC_COLOR );
613 glTexEnvi( GL_TEXTURE_ENV, GL_SOURCE1_RGB, GL_PREVIOUS );
614 glTexEnvi( GL_TEXTURE_ENV, GL_OPERAND1_RGB, GL_SRC_COLOR );
615 glTexEnvi( GL_TEXTURE_ENV, GL_SOURCE2_RGB, GL_TEXTURE);
616 glTexEnvi( GL_TEXTURE_ENV, GL_OPERAND2_RGB, GL_SRC_ALPHA );
617}
618
619void LLPostProcess::textureBlendMultiply(void)
620{
621 glTexEnvi( GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE );
622 glTexEnvi( GL_TEXTURE_ENV, GL_COMBINE_RGB, GL_MODULATE );
623 glTexEnvi( GL_TEXTURE_ENV, GL_SOURCE0_RGB, GL_PREVIOUS );
624 glTexEnvi( GL_TEXTURE_ENV, GL_OPERAND0_RGB, GL_SRC_COLOR );
625 glTexEnvi( GL_TEXTURE_ENV, GL_SOURCE1_RGB, GL_TEXTURE );
626 glTexEnvi( GL_TEXTURE_ENV, GL_OPERAND1_RGB, GL_SRC_COLOR );
627}
628
629void LLPostProcess::textureBlendMultiplyX2(void)
630{
631 glTexEnvi( GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE );
632 glTexEnvi( GL_TEXTURE_ENV, GL_COMBINE_RGB, GL_MODULATE );
633 glTexEnvi( GL_TEXTURE_ENV, GL_SOURCE0_RGB, GL_PREVIOUS );
634 glTexEnvi( GL_TEXTURE_ENV, GL_OPERAND0_RGB, GL_SRC_COLOR );
635 glTexEnvi( GL_TEXTURE_ENV, GL_SOURCE1_RGB, GL_TEXTURE );
636 glTexEnvi( GL_TEXTURE_ENV, GL_OPERAND1_RGB, GL_SRC_COLOR );
637 glTexEnvi( GL_TEXTURE_ENV, GL_RGB_SCALE, 2 );
638}
diff --git a/linden/indra/newview/llpostprocess.h b/linden/indra/newview/llpostprocess.h
index 2e98fb3..738d0f0 100644
--- a/linden/indra/newview/llpostprocess.h
+++ b/linden/indra/newview/llpostprocess.h
@@ -260,13 +260,6 @@ private:
260 void viewOrthogonal(unsigned int width, unsigned int height); 260 void viewOrthogonal(unsigned int width, unsigned int height);
261 void changeOrthogonal(unsigned int width, unsigned int height); 261 void changeOrthogonal(unsigned int width, unsigned int height);
262 void viewPerspective(void); 262 void viewPerspective(void);
263 void textureBlendReplace(void);
264 void textureBlendAdd(void);
265 void textureBlendSubtract(void);
266 void textureBlendAddSigned(void);
267 void textureBlendAlpha(void);
268 void textureBlendMultiply(void);
269 void textureBlendMultiplyX2(void);
270}; 263};
271 264
272extern LLPostProcess * gPostProcess; 265extern LLPostProcess * gPostProcess;
diff --git a/linden/indra/newview/llpreviewgesture.cpp b/linden/indra/newview/llpreviewgesture.cpp
index 4ca6009..c53eab7 100644
--- a/linden/indra/newview/llpreviewgesture.cpp
+++ b/linden/indra/newview/llpreviewgesture.cpp
@@ -67,9 +67,10 @@
67#include "llviewerstats.h" 67#include "llviewerstats.h"
68#include "llviewerwindow.h" // busycount 68#include "llviewerwindow.h" // busycount
69#include "llappviewer.h" // gVFS 69#include "llappviewer.h" // gVFS
70 70#include "llanimstatelabels.h"
71#include "llresmgr.h" 71#include "llresmgr.h"
72 72
73
73// *TODO: Translate? 74// *TODO: Translate?
74const char NONE_LABEL[] = "---"; 75const char NONE_LABEL[] = "---";
75const char SHIFT_LABEL[] = "Shift"; 76const char SHIFT_LABEL[] = "Shift";
@@ -592,7 +593,7 @@ void LLPreviewGesture::addAnimations()
592 for (i = 0; i < gUserAnimStatesCount; ++i) 593 for (i = 0; i < gUserAnimStatesCount; ++i)
593 { 594 {
594 // Use the user-readable name 595 // Use the user-readable name
595 const char* label = gUserAnimStates[i].mLabel; 596 std::string label = LLAnimStateLabels::getStateLabel( gUserAnimStates[i].mName );
596 const LLUUID& id = gUserAnimStates[i].mID; 597 const LLUUID& id = gUserAnimStates[i].mID;
597 combo->add(label, id); 598 combo->add(label, id);
598 } 599 }
diff --git a/linden/indra/newview/llpreviewscript.cpp b/linden/indra/newview/llpreviewscript.cpp
index 6acd6bf..9ef711d 100644
--- a/linden/indra/newview/llpreviewscript.cpp
+++ b/linden/indra/newview/llpreviewscript.cpp
@@ -1262,7 +1262,7 @@ void LLPreviewLSL::saveIfNeeded()
1262 std::string filepath = gDirUtilp->getExpandedFilename(LL_PATH_CACHE,asset_id.asString()); 1262 std::string filepath = gDirUtilp->getExpandedFilename(LL_PATH_CACHE,asset_id.asString());
1263 std::string filename = llformat("%s.lsl", filepath.c_str()); 1263 std::string filename = llformat("%s.lsl", filepath.c_str());
1264 1264
1265 FILE* fp = LLFile::fopen(filename.c_str(), "wb"); 1265 LLFILE* fp = LLFile::fopen(filename.c_str(), "wb");
1266 if(!fp) 1266 if(!fp)
1267 { 1267 {
1268 llwarns << "Unable to write to " << filename << llendl; 1268 llwarns << "Unable to write to " << filename << llendl;
@@ -1336,7 +1336,7 @@ void LLPreviewLSL::uploadAssetLegacy(const std::string& filename,
1336 //system(command); 1336 //system(command);
1337 1337
1338 // load the error file into the error scrolllist 1338 // load the error file into the error scrolllist
1339 FILE* fp = LLFile::fopen(err_filename.c_str(), "r"); 1339 LLFILE* fp = LLFile::fopen(err_filename.c_str(), "r");
1340 if(fp) 1340 if(fp)
1341 { 1341 {
1342 char buffer[MAX_STRING]; /*Flawfinder: ignore*/ 1342 char buffer[MAX_STRING]; /*Flawfinder: ignore*/
@@ -1851,7 +1851,7 @@ void LLLiveLSLEditor::loadScriptText(const char* filename)
1851 llerrs << "Filename is Empty!" << llendl; 1851 llerrs << "Filename is Empty!" << llendl;
1852 return; 1852 return;
1853 } 1853 }
1854 FILE* file = LLFile::fopen(filename, "rb"); /*Flawfinder: ignore*/ 1854 LLFILE* file = LLFile::fopen(filename, "rb"); /*Flawfinder: ignore*/
1855 if(file) 1855 if(file)
1856 { 1856 {
1857 // read in the whole file 1857 // read in the whole file
@@ -2063,7 +2063,7 @@ void LLLiveLSLEditor::saveIfNeeded()
2063 mItem->setTransactionID(tid); 2063 mItem->setTransactionID(tid);
2064 2064
2065 // write out the data, and store it in the asset database 2065 // write out the data, and store it in the asset database
2066 FILE* fp = LLFile::fopen(filename.c_str(), "wb"); 2066 LLFILE* fp = LLFile::fopen(filename.c_str(), "wb");
2067 if(!fp) 2067 if(!fp)
2068 { 2068 {
2069 llwarns << "Unable to write to " << filename << llendl; 2069 llwarns << "Unable to write to " << filename << llendl;
@@ -2136,7 +2136,7 @@ void LLLiveLSLEditor::uploadAssetLegacy(const std::string& filename,
2136 std::string dst_filename = llformat("%s.lso", filepath.c_str()); 2136 std::string dst_filename = llformat("%s.lso", filepath.c_str());
2137 std::string err_filename = llformat("%s.out", filepath.c_str()); 2137 std::string err_filename = llformat("%s.out", filepath.c_str());
2138 2138
2139 FILE *fp; 2139 LLFILE *fp;
2140 if(!lscript_compile(filename.c_str(), 2140 if(!lscript_compile(filename.c_str(),
2141 dst_filename.c_str(), 2141 dst_filename.c_str(),
2142 err_filename.c_str(), 2142 err_filename.c_str(),
diff --git a/linden/indra/newview/llprogressview.cpp b/linden/indra/newview/llprogressview.cpp
index b4f0704..d10cc8f 100644
--- a/linden/indra/newview/llprogressview.cpp
+++ b/linden/indra/newview/llprogressview.cpp
@@ -36,7 +36,7 @@
36#include "indra_constants.h" 36#include "indra_constants.h"
37#include "llmath.h" 37#include "llmath.h"
38#include "llgl.h" 38#include "llgl.h"
39#include "llglimmediate.h" 39#include "llrender.h"
40#include "llui.h" 40#include "llui.h"
41#include "llfontgl.h" 41#include "llfontgl.h"
42#include "llimagegl.h" 42#include "llimagegl.h"
diff --git a/linden/indra/newview/llselectmgr.cpp b/linden/indra/newview/llselectmgr.cpp
index 7d26f06..4488a46 100644
--- a/linden/indra/newview/llselectmgr.cpp
+++ b/linden/indra/newview/llselectmgr.cpp
@@ -39,7 +39,7 @@
39#include "lldbstrings.h" 39#include "lldbstrings.h"
40#include "lleconomy.h" 40#include "lleconomy.h"
41#include "llgl.h" 41#include "llgl.h"
42#include "llglimmediate.h" 42#include "llrender.h"
43#include "llpermissions.h" 43#include "llpermissions.h"
44#include "llpermissionsflags.h" 44#include "llpermissionsflags.h"
45#include "llundo.h" 45#include "llundo.h"
@@ -62,6 +62,7 @@
62#include "llhudmanager.h" 62#include "llhudmanager.h"
63#include "llinventorymodel.h" 63#include "llinventorymodel.h"
64#include "llmenugl.h" 64#include "llmenugl.h"
65#include "llmutelist.h"
65#include "llstatusbar.h" 66#include "llstatusbar.h"
66#include "llsurface.h" 67#include "llsurface.h"
67#include "lltool.h" 68#include "lltool.h"
@@ -1037,19 +1038,21 @@ void LLSelectMgr::getGrid(LLVector3& origin, LLQuaternion &rotation, LLVector3 &
1037 1038
1038 if (mGridMode == GRID_MODE_LOCAL && mSelectedObjects->getObjectCount()) 1039 if (mGridMode == GRID_MODE_LOCAL && mSelectedObjects->getObjectCount())
1039 { 1040 {
1040 LLViewerObject* root = getSelectedParentObject(mSelectedObjects->getFirstObject()); 1041 //LLViewerObject* root = getSelectedParentObject(mSelectedObjects->getFirstObject());
1041 LLBBox bbox = mSavedSelectionBBox; 1042 LLBBox bbox = mSavedSelectionBBox;
1042 mGridOrigin = mSavedSelectionBBox.getCenterAgent(); 1043 mGridOrigin = mSavedSelectionBBox.getCenterAgent();
1043 mGridScale = mSavedSelectionBBox.getExtentLocal() * 0.5f; 1044 mGridScale = mSavedSelectionBBox.getExtentLocal() * 0.5f;
1044 1045
1045 if(mSelectedObjects->getObjectCount() < 2 || !root || root->mDrawable.isNull()) 1046 // DEV-12570 Just taking the saved selection box rotation prevents
1047 // wild rotations of linked sets while in local grid mode
1048 //if(mSelectedObjects->getObjectCount() < 2 || !root || root->mDrawable.isNull())
1046 { 1049 {
1047 mGridRotation = mSavedSelectionBBox.getRotation(); 1050 mGridRotation = mSavedSelectionBBox.getRotation();
1048 } 1051 }
1049 else //set to the root object 1052 /*else //set to the root object
1050 { 1053 {
1051 mGridRotation = root->getRenderRotation(); 1054 mGridRotation = root->getRenderRotation();
1052 } 1055 }*/
1053 } 1056 }
1054 else if (mGridMode == GRID_MODE_REF_OBJECT && first_grid_object && first_grid_object->mDrawable.notNull()) 1057 else if (mGridMode == GRID_MODE_REF_OBJECT && first_grid_object && first_grid_object->mDrawable.notNull())
1055 { 1058 {
@@ -2509,11 +2512,7 @@ BOOL LLSelectMgr::selectGetGroup(LLUUID& result_id)
2509 } 2512 }
2510 } 2513 }
2511 } 2514 }
2512 if (first_id.isNull()) 2515
2513 {
2514 return FALSE;
2515 }
2516
2517 result_id = first_id; 2516 result_id = first_id;
2518 2517
2519 return identical; 2518 return identical;
@@ -4443,6 +4442,11 @@ void LLSelectMgr::processObjectPropertiesFamily(LLMessageSystem* msg, void** use
4443 reporterp->setPickedObjectProperties(name, fullname, owner_id); 4442 reporterp->setPickedObjectProperties(name, fullname, owner_id);
4444 } 4443 }
4445 } 4444 }
4445 else if (request_flags & OBJECT_PAY_REQUEST)
4446 {
4447 // check if the owner of the paid object is muted
4448 LLMuteList::getInstance()->autoRemove(owner_id, LLMuteList::AR_MONEY);
4449 }
4446 4450
4447 // Now look through all of the hovered nodes 4451 // Now look through all of the hovered nodes
4448 struct f : public LLSelectedNodeFunctor 4452 struct f : public LLSelectedNodeFunctor
@@ -4780,7 +4784,7 @@ void LLSelectMgr::updateSilhouettes()
4780 objectp->clearChanged(LLXform::MOVED | LLXform::SILHOUETTE); 4784 objectp->clearChanged(LLXform::MOVED | LLXform::SILHOUETTE);
4781 } 4785 }
4782 4786
4783 //glAlphaFunc(GL_GREATER, 0.01f); 4787 //gGL.setAlphaRejectSettings(LLRender::CF_DEFAULT);
4784} 4788}
4785 4789
4786void LLSelectMgr::renderSilhouettes(BOOL for_hud) 4790void LLSelectMgr::renderSilhouettes(BOOL for_hud)
@@ -4792,7 +4796,7 @@ void LLSelectMgr::renderSilhouettes(BOOL for_hud)
4792 4796
4793 LLViewerImage::bindTexture(mSilhouetteImagep); 4797 LLViewerImage::bindTexture(mSilhouetteImagep);
4794 LLGLSPipelineSelection gls_select; 4798 LLGLSPipelineSelection gls_select;
4795 glAlphaFunc(GL_GREATER, 0.0f); 4799 gGL.setAlphaRejectSettings(LLRender::CF_GREATER, 0.f);
4796 LLGLEnable blend(GL_BLEND); 4800 LLGLEnable blend(GL_BLEND);
4797 LLGLDepthTest gls_depth(GL_TRUE, GL_FALSE); 4801 LLGLDepthTest gls_depth(GL_TRUE, GL_FALSE);
4798 4802
@@ -4898,7 +4902,7 @@ void LLSelectMgr::renderSilhouettes(BOOL for_hud)
4898 } 4902 }
4899 4903
4900 mSilhouetteImagep->unbindTexture(0, GL_TEXTURE_2D); 4904 mSilhouetteImagep->unbindTexture(0, GL_TEXTURE_2D);
4901 glAlphaFunc(GL_GREATER, 0.01f); 4905 gGL.setAlphaRejectSettings(LLRender::CF_DEFAULT);
4902} 4906}
4903 4907
4904void LLSelectMgr::generateSilhouette(LLSelectNode* nodep, const LLVector3& view_point) 4908void LLSelectMgr::generateSilhouette(LLSelectNode* nodep, const LLVector3& view_point)
@@ -5263,7 +5267,7 @@ void LLSelectNode::renderOneSilhouette(const LLColor4 &color)
5263 if (LLSelectMgr::sRenderHiddenSelections) // && gFloaterTools && gFloaterTools->getVisible()) 5267 if (LLSelectMgr::sRenderHiddenSelections) // && gFloaterTools && gFloaterTools->getVisible())
5264 { 5268 {
5265 gGL.flush(); 5269 gGL.flush();
5266 gGL.blendFunc(GL_SRC_COLOR, GL_ONE); 5270 gGL.blendFunc(LLRender::BF_SOURCE_COLOR, LLRender::BF_ONE);
5267 LLGLEnable fog(GL_FOG); 5271 LLGLEnable fog(GL_FOG);
5268 glFogi(GL_FOG_MODE, GL_LINEAR); 5272 glFogi(GL_FOG_MODE, GL_LINEAR);
5269 float d = (LLViewerCamera::getInstance()->getPointOfInterest()-LLViewerCamera::getInstance()->getOrigin()).magVec(); 5273 float d = (LLViewerCamera::getInstance()->getPointOfInterest()-LLViewerCamera::getInstance()->getOrigin()).magVec();
@@ -5273,7 +5277,7 @@ void LLSelectNode::renderOneSilhouette(const LLColor4 &color)
5273 glFogfv(GL_FOG_COLOR, fogCol.mV); 5277 glFogfv(GL_FOG_COLOR, fogCol.mV);
5274 5278
5275 LLGLDepthTest gls_depth(GL_TRUE, GL_FALSE, GL_GEQUAL); 5279 LLGLDepthTest gls_depth(GL_TRUE, GL_FALSE, GL_GEQUAL);
5276 glAlphaFunc(GL_GREATER, 0.01f); 5280 gGL.setAlphaRejectSettings(LLRender::CF_DEFAULT);
5277 gGL.begin(LLVertexBuffer::LINES); 5281 gGL.begin(LLVertexBuffer::LINES);
5278 { 5282 {
5279 S32 i = 0; 5283 S32 i = 0;
@@ -5294,7 +5298,7 @@ void LLSelectNode::renderOneSilhouette(const LLColor4 &color)
5294 } 5298 }
5295 5299
5296 gGL.flush(); 5300 gGL.flush();
5297 gGL.blendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); 5301 gGL.setSceneBlendType(LLRender::BT_ALPHA);
5298 gGL.begin(LLVertexBuffer::TRIANGLES); 5302 gGL.begin(LLVertexBuffer::TRIANGLES);
5299 { 5303 {
5300 S32 i = 0; 5304 S32 i = 0;
diff --git a/linden/indra/newview/llspatialpartition.cpp b/linden/indra/newview/llspatialpartition.cpp
index cb115ff..520501e 100644
--- a/linden/indra/newview/llspatialpartition.cpp
+++ b/linden/indra/newview/llspatialpartition.cpp
@@ -43,7 +43,7 @@
43#include "llviewerregion.h" 43#include "llviewerregion.h"
44#include "llcamera.h" 44#include "llcamera.h"
45#include "pipeline.h" 45#include "pipeline.h"
46#include "llglimmediate.h" 46#include "llrender.h"
47#include "lloctree.h" 47#include "lloctree.h"
48 48
49const F32 SG_OCCLUSION_FUDGE = 1.01f; 49const F32 SG_OCCLUSION_FUDGE = 1.01f;
@@ -2006,7 +2006,7 @@ void renderOctree(LLSpatialGroup* group)
2006 //render solid object bounding box, color 2006 //render solid object bounding box, color
2007 //coded by buffer usage and activity 2007 //coded by buffer usage and activity
2008 LLGLDepthTest depth(GL_TRUE, GL_FALSE); 2008 LLGLDepthTest depth(GL_TRUE, GL_FALSE);
2009 gGL.blendFunc(GL_SRC_ALPHA, GL_ONE); 2009 gGL.setSceneBlendType(LLRender::BT_ADD_WITH_ALPHA);
2010 LLVector4 col; 2010 LLVector4 col;
2011 if (group->mBuilt > 0.f) 2011 if (group->mBuilt > 0.f)
2012 { 2012 {
@@ -2094,7 +2094,7 @@ void renderOctree(LLSpatialGroup* group)
2094 drawBox(group->mObjectBounds[0], group->mObjectBounds[1]*1.01f+LLVector3(0.001f, 0.001f, 0.001f)); 2094 drawBox(group->mObjectBounds[0], group->mObjectBounds[1]*1.01f+LLVector3(0.001f, 0.001f, 0.001f));
2095 2095
2096 glDepthMask(GL_TRUE); 2096 glDepthMask(GL_TRUE);
2097 gGL.blendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); 2097 gGL.setSceneBlendType(LLRender::BT_ALPHA);
2098 2098
2099 if (group->mBuilt <= 0.f) 2099 if (group->mBuilt <= 0.f)
2100 { 2100 {
@@ -2122,7 +2122,7 @@ void renderOctree(LLSpatialGroup* group)
2122void renderVisibility(LLSpatialGroup* group, LLCamera* camera) 2122void renderVisibility(LLSpatialGroup* group, LLCamera* camera)
2123{ 2123{
2124 LLGLEnable blend(GL_BLEND); 2124 LLGLEnable blend(GL_BLEND);
2125 gGL.blendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); 2125 gGL.setSceneBlendType(LLRender::BT_ALPHA);
2126 LLGLEnable cull(GL_CULL_FACE); 2126 LLGLEnable cull(GL_CULL_FACE);
2127 glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); 2127 glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
2128 2128
@@ -2498,7 +2498,7 @@ void LLSpatialPartition::renderDebug()
2498 2498
2499 LLGLDisable cullface(GL_CULL_FACE); 2499 LLGLDisable cullface(GL_CULL_FACE);
2500 LLGLEnable blend(GL_BLEND); 2500 LLGLEnable blend(GL_BLEND);
2501 gGL.blendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); 2501 gGL.setSceneBlendType(LLRender::BT_ALPHA);
2502 LLImageGL::unbindTexture(0); 2502 LLImageGL::unbindTexture(0);
2503 gPipeline.disableLights(); 2503 gPipeline.disableLights();
2504 2504
diff --git a/linden/indra/newview/llstartup.cpp b/linden/indra/newview/llstartup.cpp
index 914b993..52f4d1a 100644
--- a/linden/indra/newview/llstartup.cpp
+++ b/linden/indra/newview/llstartup.cpp
@@ -127,6 +127,7 @@
127#include "llsky.h" 127#include "llsky.h"
128#include "llsrv.h" 128#include "llsrv.h"
129#include "llstatview.h" 129#include "llstatview.h"
130#include "lltrans.h"
130#include "llsurface.h" 131#include "llsurface.h"
131#include "lltexturecache.h" 132#include "lltexturecache.h"
132#include "lltexturefetch.h" 133#include "lltexturefetch.h"
@@ -264,8 +265,8 @@ namespace
264 const char* message, const LLSD& body, 265 const char* message, const LLSD& body,
265 LLHTTPClient::ResponderPtr response) const 266 LLHTTPClient::ResponderPtr response) const
266 { 267 {
267 llwarns << " attemped to send " << message << " to " << host 268 LL_WARNS("AppInit") << " attemped to send " << message << " to " << host
268 << " with null sender" << llendl; 269 << " with null sender" << LL_ENDL;
269 } 270 }
270 }; 271 };
271} 272}
@@ -427,17 +428,17 @@ BOOL idle_startup()
427 428
428 if (ll_init_ares() == NULL) 429 if (ll_init_ares() == NULL)
429 { 430 {
430 llerrs << "Could not start address resolution system" << llendl; 431 LL_ERRS("AppInit") << "Could not start address resolution system" << LL_ENDL;
431 } 432 }
432 433
433 // 434 //
434 // Initialize messaging system 435 // Initialize messaging system
435 // 436 //
436 llinfos << "Initializing messaging system..." << llendl; 437 LL_DEBUGS("AppInit") << "Initializing messaging system..." << LL_ENDL;
437 438
438 std::string message_template_path = gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS,"message_template.msg"); 439 std::string message_template_path = gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS,"message_template.msg");
439 440
440 FILE* found_template = NULL; 441 LLFILE* found_template = NULL;
441 found_template = LLFile::fopen(message_template_path.c_str(), "r"); /* Flawfinder: ignore */ 442 found_template = LLFile::fopen(message_template_path.c_str(), "r"); /* Flawfinder: ignore */
442 if (found_template) 443 if (found_template)
443 { 444 {
@@ -495,7 +496,7 @@ BOOL idle_startup()
495 496
496 if (gSavedSettings.getBOOL("LogMessages")) 497 if (gSavedSettings.getBOOL("LogMessages"))
497 { 498 {
498 llinfos << "Message logging activated!" << llendl; 499 LL_DEBUGS("AppInit") << "Message logging activated!" << LL_ENDL;
499 msg->startLogging(); 500 msg->startLogging();
500 } 501 }
501 502
@@ -520,13 +521,13 @@ BOOL idle_startup()
520 F32 outBandwidth = gSavedSettings.getF32("OutBandwidth"); 521 F32 outBandwidth = gSavedSettings.getF32("OutBandwidth");
521 if (inBandwidth != 0.f) 522 if (inBandwidth != 0.f)
522 { 523 {
523 llinfos << "Setting packetring incoming bandwidth to " << inBandwidth << llendl; 524 LL_DEBUGS("AppInit") << "Setting packetring incoming bandwidth to " << inBandwidth << LL_ENDL;
524 msg->mPacketRing.setUseInThrottle(TRUE); 525 msg->mPacketRing.setUseInThrottle(TRUE);
525 msg->mPacketRing.setInBandwidth(inBandwidth); 526 msg->mPacketRing.setInBandwidth(inBandwidth);
526 } 527 }
527 if (outBandwidth != 0.f) 528 if (outBandwidth != 0.f)
528 { 529 {
529 llinfos << "Setting packetring outgoing bandwidth to " << outBandwidth << llendl; 530 LL_DEBUGS("AppInit") << "Setting packetring outgoing bandwidth to " << outBandwidth << LL_ENDL;
530 msg->mPacketRing.setUseOutThrottle(TRUE); 531 msg->mPacketRing.setUseOutThrottle(TRUE);
531 msg->mPacketRing.setOutBandwidth(outBandwidth); 532 msg->mPacketRing.setOutBandwidth(outBandwidth);
532 } 533 }
@@ -557,7 +558,7 @@ BOOL idle_startup()
557 BOOL init = gAudiop->init(kAUDIO_NUM_SOURCES, window_handle); 558 BOOL init = gAudiop->init(kAUDIO_NUM_SOURCES, window_handle);
558 if(!init) 559 if(!init)
559 { 560 {
560 llwarns << "Unable to initialize audio engine" << llendl; 561 LL_WARNS("AppInit") << "Unable to initialize audio engine" << LL_ENDL;
561 } 562 }
562 gAudiop->setMuted(TRUE); 563 gAudiop->setMuted(TRUE);
563 } 564 }
@@ -565,7 +566,7 @@ BOOL idle_startup()
565 566
566 if (LLTimer::knownBadTimer()) 567 if (LLTimer::knownBadTimer())
567 { 568 {
568 llwarns << "Unreliable timers detected (may be bad PCI chipset)!!" << llendl; 569 LL_WARNS("AppInit") << "Unreliable timers detected (may be bad PCI chipset)!!" << LL_ENDL;
569 } 570 }
570 571
571 // 572 //
@@ -638,7 +639,7 @@ BOOL idle_startup()
638 //--------------------------------------------------------------------- 639 //---------------------------------------------------------------------
639 if (STATE_MEDIA_INIT == LLStartUp::getStartupState()) 640 if (STATE_MEDIA_INIT == LLStartUp::getStartupState())
640 { 641 {
641 llinfos << "Initializing Multimedia...." << llendl; 642 LL_DEBUGS("AppInit") << "Initializing Multimedia...." << LL_ENDL;
642 set_startup_status(0.03f, "Initializing Multimedia...", gAgent.mMOTD.c_str()); 643 set_startup_status(0.03f, "Initializing Multimedia...", gAgent.mMOTD.c_str());
643 display_startup(); 644 display_startup();
644 LLViewerMedia::initClass(); 645 LLViewerMedia::initClass();
@@ -656,7 +657,7 @@ BOOL idle_startup()
656 if (STATE_LOGIN_SHOW == LLStartUp::getStartupState()) 657 if (STATE_LOGIN_SHOW == LLStartUp::getStartupState())
657 { 658 {
658 659
659 llinfos << "Initializing Window" << llendl; 660 LL_DEBUGS("AppInit") << "Initializing Window" << LL_ENDL;
660 661
661 gViewerWindow->getWindow()->setCursor(UI_CURSOR_ARROW); 662 gViewerWindow->getWindow()->setCursor(UI_CURSOR_ARROW);
662 // Push our window frontmost 663 // Push our window frontmost
@@ -667,11 +668,13 @@ BOOL idle_startup()
667 if (show_connect_box) 668 if (show_connect_box)
668 { 669 {
669 // Load all the name information out of the login view 670 // Load all the name information out of the login view
670 LLPanelLogin::getFields(firstname, lastname, password, remember_password); 671 // NOTE: Hits "Attempted getFields with no login view shown" warning, since we don't
672 // show the login view until login_show() is called below.
673 // LLPanelLogin::getFields(firstname, lastname, password, remember_password);
671 674
672 if (gNoRender) 675 if (gNoRender)
673 { 676 {
674 llerrs << "Need to autologin or use command line with norender!" << llendl; 677 LL_ERRS("AppInit") << "Need to autologin or use command line with norender!" << LL_ENDL;
675 } 678 }
676 // Make sure the process dialog doesn't hide things 679 // Make sure the process dialog doesn't hide things
677 gViewerWindow->setShowProgress(FALSE); 680 gViewerWindow->setShowProgress(FALSE);
@@ -764,7 +767,7 @@ BOOL idle_startup()
764 } 767 }
765 gSavedSettings.setBOOL("RememberPassword", remember_password); 768 gSavedSettings.setBOOL("RememberPassword", remember_password);
766 769
767 llinfos << "Attempting login as: " << firstname << " " << lastname << llendl; 770 LL_INFOS("AppInit") << "Attempting login as: " << firstname << " " << lastname << LL_ENDL;
768 gDebugInfo["LoginName"] = firstname + " " + lastname; 771 gDebugInfo["LoginName"] = firstname + " " + lastname;
769 } 772 }
770 773
@@ -812,22 +815,28 @@ BOOL idle_startup()
812 LLString server_label; 815 LLString server_label;
813 S32 domain_name_index; 816 S32 domain_name_index;
814 BOOL user_picked_server = LLPanelLogin::getServer( server_label, domain_name_index ); 817 BOOL user_picked_server = LLPanelLogin::getServer( server_label, domain_name_index );
815 gGridChoice = (EGridInfo) domain_name_index; 818 if((EGridInfo)domain_name_index == GRID_INFO_OTHER)
816 gSavedSettings.setS32("ServerChoice", gGridChoice);
817 if (gGridChoice == GRID_INFO_OTHER)
818 { 819 {
819 gGridName = server_label;/* Flawfinder: ignore */ 820 // Since the grid chosen was an 'other', set the choice by string.
821 LLViewerLogin::getInstance()->setGridChoice(server_label);
822 }
823 else
824 {
825 // Set the choice according to index.
826 LLViewerLogin::getInstance()->setGridChoice((EGridInfo)domain_name_index);
820 } 827 }
821 828
822 if ( user_picked_server ) 829 if ( user_picked_server )
823 { // User picked a grid from the popup, so clear the stored urls and they will be re-generated from gGridChoice 830 { // User picked a grid from the popup, so clear the
831 // stored uris and they will be re-generated from the GridChoice
824 sAuthUris.clear(); 832 sAuthUris.clear();
825 LLAppViewer::instance()->resetURIs(); 833 LLViewerLogin::getInstance()->resetURIs();
826 } 834 }
827 835
828 LLString location; 836 LLString location;
829 LLPanelLogin::getLocation( location ); 837 LLPanelLogin::getLocation( location );
830 LLURLSimString::setString( location ); 838 LLURLSimString::setString( location );
839
831 // END TODO 840 // END TODO
832 LLPanelLogin::close(); 841 LLPanelLogin::close();
833 } 842 }
@@ -884,7 +893,7 @@ BOOL idle_startup()
884 893
885 // Poke the VFS, which could potentially block for a while if 894 // Poke the VFS, which could potentially block for a while if
886 // Windows XP is acting up 895 // Windows XP is acting up
887 set_startup_status(0.07f, "Verifying cache files (can take 60-90 seconds)...", NULL); 896 set_startup_status(0.07f, LLTrans::getString("LoginVerifyingCache").c_str(), NULL);
888 display_startup(); 897 display_startup();
889 898
890 gVFS->pokeFiles(); 899 gVFS->pokeFiles();
@@ -907,10 +916,9 @@ BOOL idle_startup()
907 if(STATE_LOGIN_AUTH_INIT == LLStartUp::getStartupState()) 916 if(STATE_LOGIN_AUTH_INIT == LLStartUp::getStartupState())
908 { 917 {
909//#define LL_MINIMIAL_REQUESTED_OPTIONS 918//#define LL_MINIMIAL_REQUESTED_OPTIONS
910 gDebugInfo["GridName"] = gGridInfo[gGridChoice].mLabel; 919 gDebugInfo["GridName"] = LLViewerLogin::getInstance()->getGridLabel();
911 920
912 // *Note: this is where gUserAuth used to be created. 921 // *Note: this is where gUserAuth used to be created.
913
914 requested_options.clear(); 922 requested_options.clear();
915 requested_options.push_back("inventory-root"); 923 requested_options.push_back("inventory-root");
916 requested_options.push_back("inventory-skeleton"); 924 requested_options.push_back("inventory-skeleton");
@@ -942,7 +950,8 @@ BOOL idle_startup()
942 gSavedSettings.setBOOL("UseDebugMenus", TRUE); 950 gSavedSettings.setBOOL("UseDebugMenus", TRUE);
943 requested_options.push_back("god-connect"); 951 requested_options.push_back("god-connect");
944 } 952 }
945 const std::vector<std::string>& uris = LLAppViewer::instance()->getLoginURIs(); 953 std::vector<std::string> uris;
954 LLViewerLogin::getInstance()->getLoginURIs(uris);
946 std::vector<std::string>::const_iterator iter, end; 955 std::vector<std::string>::const_iterator iter, end;
947 for (iter = uris.begin(), end = uris.end(); iter != end; ++iter) 956 for (iter = uris.begin(), end = uris.end(); iter != end; ++iter)
948 { 957 {
@@ -953,15 +962,16 @@ BOOL idle_startup()
953 } 962 }
954 sAuthUriNum = 0; 963 sAuthUriNum = 0;
955 auth_method = "login_to_simulator"; 964 auth_method = "login_to_simulator";
956 auth_desc = "Logging in. "; 965
957 auth_desc += LLAppViewer::instance()->getSecondLifeTitle(); 966 LLString::format_map_t args;
958 auth_desc += " may appear frozen. Please wait."; 967 args["[APP_NAME]"] = LLAppViewer::instance()->getSecondLifeTitle();
968 auth_desc = LLTrans::getString("LoginInProgress", args).c_str();
959 LLStartUp::setStartupState( STATE_LOGIN_AUTHENTICATE ); 969 LLStartUp::setStartupState( STATE_LOGIN_AUTHENTICATE );
960 } 970 }
961 971
962 if (STATE_LOGIN_AUTHENTICATE == LLStartUp::getStartupState()) 972 if (STATE_LOGIN_AUTHENTICATE == LLStartUp::getStartupState())
963 { 973 {
964 lldebugs << "STATE_LOGIN_AUTHENTICATE" << llendl; 974 LL_DEBUGS("AppInit") << "STATE_LOGIN_AUTHENTICATE" << LL_ENDL;
965 set_startup_status(progress, auth_desc.c_str(), auth_message.c_str()); 975 set_startup_status(progress, auth_desc.c_str(), auth_message.c_str());
966 progress += 0.02f; 976 progress += 0.02f;
967 display_startup(); 977 display_startup();
@@ -1021,7 +1031,7 @@ BOOL idle_startup()
1021 1031
1022 if(STATE_LOGIN_NO_DATA_YET == LLStartUp::getStartupState()) 1032 if(STATE_LOGIN_NO_DATA_YET == LLStartUp::getStartupState())
1023 { 1033 {
1024 //lldebugs << "STATE_LOGIN_NO_DATA_YET" << llendl; 1034 LL_DEBUGS("AppInit") << "STATE_LOGIN_NO_DATA_YET" << LL_ENDL;
1025 // If we get here we have gotten past the potential stall 1035 // If we get here we have gotten past the potential stall
1026 // in curl, so take "may appear frozen" out of progress bar. JC 1036 // in curl, so take "may appear frozen" out of progress bar. JC
1027 auth_desc = "Logging in..."; 1037 auth_desc = "Logging in...";
@@ -1035,7 +1045,7 @@ BOOL idle_startup()
1035 LLUserAuth::UserAuthcode error = LLUserAuth::getInstance()->authResponse(); 1045 LLUserAuth::UserAuthcode error = LLUserAuth::getInstance()->authResponse();
1036 if(LLUserAuth::E_NO_RESPONSE_YET == error) 1046 if(LLUserAuth::E_NO_RESPONSE_YET == error)
1037 { 1047 {
1038 //llinfos << "waiting..." << llendl; 1048 LL_DEBUGS("AppInit") << "waiting..." << LL_ENDL;
1039 return do_normal_idle; 1049 return do_normal_idle;
1040 } 1050 }
1041 LLStartUp::setStartupState( STATE_LOGIN_DOWNLOADING ); 1051 LLStartUp::setStartupState( STATE_LOGIN_DOWNLOADING );
@@ -1046,7 +1056,7 @@ BOOL idle_startup()
1046 1056
1047 if(STATE_LOGIN_DOWNLOADING == LLStartUp::getStartupState()) 1057 if(STATE_LOGIN_DOWNLOADING == LLStartUp::getStartupState())
1048 { 1058 {
1049 lldebugs << "STATE_LOGIN_DOWNLOADING" << llendl; 1059 LL_DEBUGS("AppInit") << "STATE_LOGIN_DOWNLOADING" << LL_ENDL;
1050 // Process messages to keep from dropping circuit. 1060 // Process messages to keep from dropping circuit.
1051 LLMessageSystem* msg = gMessageSystem; 1061 LLMessageSystem* msg = gMessageSystem;
1052 while (msg->checkAllMessages(gFrameCount, gServicePump)) 1062 while (msg->checkAllMessages(gFrameCount, gServicePump))
@@ -1056,18 +1066,18 @@ BOOL idle_startup()
1056 LLUserAuth::UserAuthcode error = LLUserAuth::getInstance()->authResponse(); 1066 LLUserAuth::UserAuthcode error = LLUserAuth::getInstance()->authResponse();
1057 if(LLUserAuth::E_DOWNLOADING == error) 1067 if(LLUserAuth::E_DOWNLOADING == error)
1058 { 1068 {
1059 //llinfos << "downloading..." << llendl; 1069 LL_DEBUGS("AppInit") << "downloading..." << LL_ENDL;
1060 return do_normal_idle; 1070 return do_normal_idle;
1061 } 1071 }
1062 LLStartUp::setStartupState( STATE_LOGIN_PROCESS_RESPONSE ); 1072 LLStartUp::setStartupState( STATE_LOGIN_PROCESS_RESPONSE );
1063 progress += 0.01f; 1073 progress += 0.01f;
1064 set_startup_status(progress, "Processing Response...", auth_message.c_str()); 1074 set_startup_status(progress, LLTrans::getString("LoginProcessingResponse").c_str(), auth_message.c_str());
1065 return do_normal_idle; 1075 return do_normal_idle;
1066 } 1076 }
1067 1077
1068 if(STATE_LOGIN_PROCESS_RESPONSE == LLStartUp::getStartupState()) 1078 if(STATE_LOGIN_PROCESS_RESPONSE == LLStartUp::getStartupState())
1069 { 1079 {
1070 lldebugs << "STATE_LOGIN_PROCESS_RESPONSE" << llendl; 1080 LL_DEBUGS("AppInit") << "STATE_LOGIN_PROCESS_RESPONSE" << LL_ENDL;
1071 std::ostringstream emsg; 1081 std::ostringstream emsg;
1072 BOOL quit = FALSE; 1082 BOOL quit = FALSE;
1073 const char* login_response = NULL; 1083 const char* login_response = NULL;
@@ -1089,18 +1099,18 @@ BOOL idle_startup()
1089 } 1099 }
1090 else if(login_response && (0 == strcmp(login_response, "indeterminate"))) 1100 else if(login_response && (0 == strcmp(login_response, "indeterminate")))
1091 { 1101 {
1092 llinfos << "Indeterminate login..." << llendl; 1102 LL_INFOS("AppInit") << "Indeterminate login..." << LL_ENDL;
1093 sAuthUris = LLSRV::rewriteURI(LLUserAuth::getInstance()->getResponse("next_url")); 1103 sAuthUris = LLSRV::rewriteURI(LLUserAuth::getInstance()->getResponse("next_url"));
1094 sAuthUriNum = 0; 1104 sAuthUriNum = 0;
1095 auth_method = LLUserAuth::getInstance()->getResponse("next_method"); 1105 auth_method = LLUserAuth::getInstance()->getResponse("next_method");
1096 auth_message = LLUserAuth::getInstance()->getResponse("message"); 1106 auth_message = LLUserAuth::getInstance()->getResponse("message");
1097 if(auth_method.substr(0, 5) == "login") 1107 if(auth_method.substr(0, 5) == "login")
1098 { 1108 {
1099 auth_desc.assign("Authenticating..."); 1109 auth_desc.assign(LLTrans::getString("LoginAuthenticating").c_str());
1100 } 1110 }
1101 else 1111 else
1102 { 1112 {
1103 auth_desc.assign("Performing account maintenance..."); 1113 auth_desc.assign(LLTrans::getString("LoginMaintenance").c_str());
1104 } 1114 }
1105 // ignoring the duration & options array for now. 1115 // ignoring the duration & options array for now.
1106 // Go back to authenticate. 1116 // Go back to authenticate.
@@ -1136,7 +1146,7 @@ BOOL idle_startup()
1136 { 1146 {
1137 if (show_connect_box) 1147 if (show_connect_box)
1138 { 1148 {
1139 llinfos << "Need tos agreement" << llendl; 1149 LL_DEBUGS("AppInit") << "Need tos agreement" << LL_ENDL;
1140 LLStartUp::setStartupState( STATE_UPDATE_CHECK ); 1150 LLStartUp::setStartupState( STATE_UPDATE_CHECK );
1141 LLFloaterTOS* tos_dialog = LLFloaterTOS::show(LLFloaterTOS::TOS_TOS, 1151 LLFloaterTOS* tos_dialog = LLFloaterTOS::show(LLFloaterTOS::TOS_TOS,
1142 message_response); 1152 message_response);
@@ -1153,7 +1163,7 @@ BOOL idle_startup()
1153 { 1163 {
1154 if (show_connect_box) 1164 if (show_connect_box)
1155 { 1165 {
1156 llinfos << "Need critical message" << llendl; 1166 LL_DEBUGS("AppInit") << "Need critical message" << LL_ENDL;
1157 LLStartUp::setStartupState( STATE_UPDATE_CHECK ); 1167 LLStartUp::setStartupState( STATE_UPDATE_CHECK );
1158 LLFloaterTOS* tos_dialog = LLFloaterTOS::show(LLFloaterTOS::TOS_CRITICAL_MESSAGE, 1168 LLFloaterTOS* tos_dialog = LLFloaterTOS::show(LLFloaterTOS::TOS_CRITICAL_MESSAGE,
1159 message_response); 1169 message_response);
@@ -1188,7 +1198,7 @@ BOOL idle_startup()
1188 } 1198 }
1189 if(reason_response && (0 == strcmp(reason_response, "optional"))) 1199 if(reason_response && (0 == strcmp(reason_response, "optional")))
1190 { 1200 {
1191 llinfos << "Login got optional update" << llendl; 1201 LL_DEBUGS("AppInit") << "Login got optional update" << LL_ENDL;
1192 auth_message = LLUserAuth::getInstance()->getResponse("message"); 1202 auth_message = LLUserAuth::getInstance()->getResponse("message");
1193 if (show_connect_box) 1203 if (show_connect_box)
1194 { 1204 {
@@ -1213,9 +1223,9 @@ BOOL idle_startup()
1213 } else { 1223 } else {
1214 sAuthUriNum++; 1224 sAuthUriNum++;
1215 std::ostringstream s; 1225 std::ostringstream s;
1216 s << "Previous login attempt failed. Logging in, attempt " 1226 LLString::format_map_t args;
1217 << (sAuthUriNum + 1) << ". "; 1227 args["[NUMBER]"] = sAuthUriNum + 1;
1218 auth_desc = s.str(); 1228 auth_desc = LLTrans::getString("LoginAttempt", args).c_str();
1219 LLStartUp::setStartupState( STATE_LOGIN_AUTHENTICATE ); 1229 LLStartUp::setStartupState( STATE_LOGIN_AUTHENTICATE );
1220 return do_normal_idle; 1230 return do_normal_idle;
1221 } 1231 }
@@ -1451,8 +1461,8 @@ BOOL idle_startup()
1451 { 1461 {
1452 if (gNoRender) 1462 if (gNoRender)
1453 { 1463 {
1454 llinfos << "Bad login - missing return values" << llendl; 1464 LL_WARNS("AppInit") << "Bad login - missing return values" << LL_ENDL;
1455 llinfos << emsg << llendl; 1465 LL_WARNS("AppInit") << emsg << LL_ENDL;
1456 exit(0); 1466 exit(0);
1457 } 1467 }
1458 // Bounce back to the login screen. 1468 // Bounce back to the login screen.
@@ -1471,8 +1481,8 @@ BOOL idle_startup()
1471 { 1481 {
1472 if (gNoRender) 1482 if (gNoRender)
1473 { 1483 {
1474 llinfos << "Failed to login!" << llendl; 1484 LL_WARNS("AppInit") << "Failed to login!" << LL_ENDL;
1475 llinfos << emsg << llendl; 1485 LL_WARNS("AppInit") << emsg << LL_ENDL;
1476 exit(0); 1486 exit(0);
1477 } 1487 }
1478 // Bounce back to the login screen. 1488 // Bounce back to the login screen.
@@ -1493,7 +1503,7 @@ BOOL idle_startup()
1493 //--------------------------------------------------------------------- 1503 //---------------------------------------------------------------------
1494 if (STATE_WORLD_INIT == LLStartUp::getStartupState()) 1504 if (STATE_WORLD_INIT == LLStartUp::getStartupState())
1495 { 1505 {
1496 set_startup_status(0.40f, "Initializing World...", gAgent.mMOTD.c_str()); 1506 set_startup_status(0.40f, LLTrans::getString("LoginInitializingWorld").c_str(), gAgent.mMOTD.c_str());
1497 display_startup(); 1507 display_startup();
1498 // We should have an agent id by this point. 1508 // We should have an agent id by this point.
1499 llassert(!(gAgentID == LLUUID::null)); 1509 llassert(!(gAgentID == LLUUID::null));
@@ -1541,11 +1551,11 @@ BOOL idle_startup()
1541 LLWorld::getInstance()->addRegion(first_sim_handle, first_sim); 1551 LLWorld::getInstance()->addRegion(first_sim_handle, first_sim);
1542 1552
1543 LLViewerRegion *regionp = LLWorld::getInstance()->getRegionFromHandle(first_sim_handle); 1553 LLViewerRegion *regionp = LLWorld::getInstance()->getRegionFromHandle(first_sim_handle);
1544 llinfos << "Adding initial simulator " << regionp->getOriginGlobal() << llendl; 1554 LL_INFOS("AppInit") << "Adding initial simulator " << regionp->getOriginGlobal() << LL_ENDL;
1545 1555
1546 LLStartUp::setStartupState( STATE_SEED_GRANTED_WAIT ); 1556 LLStartUp::setStartupState( STATE_SEED_GRANTED_WAIT );
1547 regionp->setSeedCapability(first_sim_seed_cap); 1557 regionp->setSeedCapability(first_sim_seed_cap);
1548 llinfos << "Waiting for seed grant ...." << llendl; 1558 LL_DEBUGS("AppInit") << "Waiting for seed grant ...." << LL_ENDL;
1549 1559
1550 // Set agent's initial region to be the one we just created. 1560 // Set agent's initial region to be the one we just created.
1551 gAgent.setRegion(regionp); 1561 gAgent.setRegion(regionp);
@@ -1613,7 +1623,7 @@ BOOL idle_startup()
1613 // 1623 //
1614 // Set message handlers 1624 // Set message handlers
1615 // 1625 //
1616 llinfos << "Initializing communications..." << llendl; 1626 LL_INFOS("AppInit") << "Initializing communications..." << LL_ENDL;
1617 1627
1618 // register callbacks for messages. . . do this after initial handshake to make sure that we don't catch any unwanted 1628 // register callbacks for messages. . . do this after initial handshake to make sure that we don't catch any unwanted
1619 register_viewer_callbacks(gMessageSystem); 1629 register_viewer_callbacks(gMessageSystem);
@@ -1662,7 +1672,7 @@ BOOL idle_startup()
1662 1672
1663 // Sets up the parameters for the first simulator 1673 // Sets up the parameters for the first simulator
1664 1674
1665 llinfos << "Initializing camera..." << llendl; 1675 LL_DEBUGS("AppInit") << "Initializing camera..." << LL_ENDL;
1666 gFrameTime = totalTime(); 1676 gFrameTime = totalTime();
1667 F32 last_time = gFrameTimeSeconds; 1677 F32 last_time = gFrameTimeSeconds;
1668 gFrameTimeSeconds = (S64)(gFrameTime - gStartTime)/SEC_TO_MICROSEC; 1678 gFrameTimeSeconds = (S64)(gFrameTime - gStartTime)/SEC_TO_MICROSEC;
@@ -1697,19 +1707,19 @@ BOOL idle_startup()
1697 // Initialize global class data needed for surfaces (i.e. textures) 1707 // Initialize global class data needed for surfaces (i.e. textures)
1698 if (!gNoRender) 1708 if (!gNoRender)
1699 { 1709 {
1700 llinfos << "Initializing sky..." << llendl; 1710 LL_DEBUGS("AppInit") << "Initializing sky..." << LL_ENDL;
1701 // Initialize all of the viewer object classes for the first time (doing things like texture fetches. 1711 // Initialize all of the viewer object classes for the first time (doing things like texture fetches.
1702 gSky.init(initial_sun_direction); 1712 gSky.init(initial_sun_direction);
1703 } 1713 }
1704 1714
1705 llinfos << "Decoding images..." << llendl; 1715 LL_DEBUGS("AppInit") << "Decoding images..." << LL_ENDL;
1706 // For all images pre-loaded into viewer cache, decode them. 1716 // For all images pre-loaded into viewer cache, decode them.
1707 // Need to do this AFTER we init the sky 1717 // Need to do this AFTER we init the sky
1708 const S32 DECODE_TIME_SEC = 2; 1718 const S32 DECODE_TIME_SEC = 2;
1709 for (int i = 0; i < DECODE_TIME_SEC; i++) 1719 for (int i = 0; i < DECODE_TIME_SEC; i++)
1710 { 1720 {
1711 F32 frac = (F32)i / (F32)DECODE_TIME_SEC; 1721 F32 frac = (F32)i / (F32)DECODE_TIME_SEC;
1712 set_startup_status(0.45f + frac*0.1f, "Decoding images...", gAgent.mMOTD.c_str()); 1722 set_startup_status(0.45f + frac*0.1f, LLTrans::getString("LoginDecodingImages").c_str(), gAgent.mMOTD.c_str());
1713 display_startup(); 1723 display_startup();
1714 gImageList.decodeAllImages(1.f); 1724 gImageList.decodeAllImages(1.f);
1715 } 1725 }
@@ -1720,14 +1730,14 @@ BOOL idle_startup()
1720 LLMessageSystem* msg = gMessageSystem; 1730 LLMessageSystem* msg = gMessageSystem;
1721 if (!msg->mOurCircuitCode) 1731 if (!msg->mOurCircuitCode)
1722 { 1732 {
1723 llwarns << "Attempting to connect to simulator with a zero circuit code!" << llendl; 1733 LL_WARNS("AppInit") << "Attempting to connect to simulator with a zero circuit code!" << LL_ENDL;
1724 } 1734 }
1725 1735
1726 gUseCircuitCallbackCalled = FALSE; 1736 gUseCircuitCallbackCalled = FALSE;
1727 1737
1728 msg->enableCircuit(first_sim, TRUE); 1738 msg->enableCircuit(first_sim, TRUE);
1729 // now, use the circuit info to tell simulator about us! 1739 // now, use the circuit info to tell simulator about us!
1730 llinfos << "viewer: UserLoginLocationReply() Enabling " << first_sim << " with code " << msg->mOurCircuitCode << llendl; 1740 LL_INFOS("AppInit") << "viewer: UserLoginLocationReply() Enabling " << first_sim << " with code " << msg->mOurCircuitCode << LL_ENDL;
1731 msg->newMessageFast(_PREHASH_UseCircuitCode); 1741 msg->newMessageFast(_PREHASH_UseCircuitCode);
1732 msg->nextBlockFast(_PREHASH_CircuitCode); 1742 msg->nextBlockFast(_PREHASH_CircuitCode);
1733 msg->addU32Fast(_PREHASH_Code, msg->mOurCircuitCode); 1743 msg->addU32Fast(_PREHASH_Code, msg->mOurCircuitCode);
@@ -1753,8 +1763,8 @@ BOOL idle_startup()
1753 //--------------------------------------------------------------------- 1763 //---------------------------------------------------------------------
1754 if(STATE_WORLD_WAIT == LLStartUp::getStartupState()) 1764 if(STATE_WORLD_WAIT == LLStartUp::getStartupState())
1755 { 1765 {
1756 //llinfos << "Waiting for simulator ack...." << llendl; 1766 LL_DEBUGS("AppInit") << "Waiting for simulator ack...." << LL_ENDL;
1757 set_startup_status(0.59f, "Waiting for region handshake...", gAgent.mMOTD.c_str()); 1767 set_startup_status(0.59f, LLTrans::getString("LoginWaitingForRegionHandshake").c_str(), gAgent.mMOTD.c_str());
1758 if(gGotUseCircuitCodeAck) 1768 if(gGotUseCircuitCodeAck)
1759 { 1769 {
1760 LLStartUp::setStartupState( STATE_AGENT_SEND ); 1770 LLStartUp::setStartupState( STATE_AGENT_SEND );
@@ -1772,8 +1782,8 @@ BOOL idle_startup()
1772 //--------------------------------------------------------------------- 1782 //---------------------------------------------------------------------
1773 if (STATE_AGENT_SEND == LLStartUp::getStartupState()) 1783 if (STATE_AGENT_SEND == LLStartUp::getStartupState())
1774 { 1784 {
1775 llinfos << "Connecting to region..." << llendl; 1785 LL_DEBUGS("AppInit") << "Connecting to region..." << LL_ENDL;
1776 set_startup_status(0.60f, "Connecting to region...", gAgent.mMOTD.c_str()); 1786 set_startup_status(0.60f, LLTrans::getString("LoginConnectingToRegion").c_str(), gAgent.mMOTD.c_str());
1777 // register with the message system so it knows we're 1787 // register with the message system so it knows we're
1778 // expecting this message 1788 // expecting this message
1779 LLMessageSystem* msg = gMessageSystem; 1789 LLMessageSystem* msg = gMessageSystem;
@@ -1824,8 +1834,8 @@ BOOL idle_startup()
1824 } 1834 }
1825 else 1835 else
1826 { 1836 {
1827 //llinfos << "Awaiting AvatarInitComplete, got " 1837 LL_DEBUGS("AppInit") << "Awaiting AvatarInitComplete, got "
1828 //<< msg->getMessageName() << llendl; 1838 << msg->getMessageName() << LL_ENDL;
1829 } 1839 }
1830 } 1840 }
1831 msg->processAcks(); 1841 msg->processAcks();
@@ -1877,7 +1887,7 @@ BOOL idle_startup()
1877 { 1887 {
1878 if(!gInventory.loadSkeleton(options, gInventoryLibraryOwner)) 1888 if(!gInventory.loadSkeleton(options, gInventoryLibraryOwner))
1879 { 1889 {
1880 llwarns << "Problem loading inventory-skel-lib" << llendl; 1890 LL_WARNS("AppInit") << "Problem loading inventory-skel-lib" << LL_ENDL;
1881 } 1891 }
1882 } 1892 }
1883 options.clear(); 1893 options.clear();
@@ -1885,8 +1895,7 @@ BOOL idle_startup()
1885 { 1895 {
1886 if(!gInventory.loadSkeleton(options, gAgent.getID())) 1896 if(!gInventory.loadSkeleton(options, gAgent.getID()))
1887 { 1897 {
1888 llwarns << "Problem loading inventory-skel-targets" 1898 LL_WARNS("AppInit") << "Problem loading inventory-skel-targets" << LL_ENDL;
1889 << llendl;
1890 } 1899 }
1891 } 1900 }
1892 1901
@@ -2038,17 +2047,17 @@ BOOL idle_startup()
2038 if (rate_bps > FASTER_RATE_BPS 2047 if (rate_bps > FASTER_RATE_BPS
2039 && rate_bps > max_bandwidth) 2048 && rate_bps > max_bandwidth)
2040 { 2049 {
2041 llinfos << "Fast network connection, increasing max bandwidth to " 2050 LL_DEBUGS("AppInit") << "Fast network connection, increasing max bandwidth to "
2042 << FASTER_RATE_BPS/1024.f 2051 << FASTER_RATE_BPS/1024.f
2043 << " kbps" << llendl; 2052 << " kbps" << LL_ENDL;
2044 gViewerThrottle.setMaxBandwidth(FASTER_RATE_BPS / 1024.f); 2053 gViewerThrottle.setMaxBandwidth(FASTER_RATE_BPS / 1024.f);
2045 } 2054 }
2046 else if (rate_bps > FAST_RATE_BPS 2055 else if (rate_bps > FAST_RATE_BPS
2047 && rate_bps > max_bandwidth) 2056 && rate_bps > max_bandwidth)
2048 { 2057 {
2049 llinfos << "Fast network connection, increasing max bandwidth to " 2058 LL_DEBUGS("AppInit") << "Fast network connection, increasing max bandwidth to "
2050 << FAST_RATE_BPS/1024.f 2059 << FAST_RATE_BPS/1024.f
2051 << " kbps" << llendl; 2060 << " kbps" << LL_ENDL;
2052 gViewerThrottle.setMaxBandwidth(FAST_RATE_BPS / 1024.f); 2061 gViewerThrottle.setMaxBandwidth(FAST_RATE_BPS / 1024.f);
2053 } 2062 }
2054 } 2063 }
@@ -2080,8 +2089,8 @@ BOOL idle_startup()
2080 LLUserAuth::options_t gesture_options; 2089 LLUserAuth::options_t gesture_options;
2081 if (LLUserAuth::getInstance()->getOptions("gestures", gesture_options)) 2090 if (LLUserAuth::getInstance()->getOptions("gestures", gesture_options))
2082 { 2091 {
2083 llinfos << "Gesture Manager loading " << gesture_options.size() 2092 LL_DEBUGS("AppInit") << "Gesture Manager loading " << gesture_options.size()
2084 << llendl; 2093 << LL_ENDL;
2085 std::vector<LLUUID> item_ids; 2094 std::vector<LLUUID> item_ids;
2086 LLUserAuth::options_t::iterator resp_it; 2095 LLUserAuth::options_t::iterator resp_it;
2087 for (resp_it = gesture_options.begin(); 2096 for (resp_it = gesture_options.begin();
@@ -2134,7 +2143,7 @@ BOOL idle_startup()
2134 msg->setHandlerFuncFast(_PREHASH_AttachedSound, process_attached_sound); 2143 msg->setHandlerFuncFast(_PREHASH_AttachedSound, process_attached_sound);
2135 msg->setHandlerFuncFast(_PREHASH_AttachedSoundGainChange, process_attached_sound_gain_change); 2144 msg->setHandlerFuncFast(_PREHASH_AttachedSoundGainChange, process_attached_sound_gain_change);
2136 2145
2137 llinfos << "Initialization complete" << llendl; 2146 LL_DEBUGS("AppInit") << "Initialization complete" << LL_ENDL;
2138 2147
2139 gRenderStartTime.reset(); 2148 gRenderStartTime.reset();
2140 gForegroundTime.reset(); 2149 gForegroundTime.reset();
@@ -2249,7 +2258,7 @@ BOOL idle_startup()
2249 { 2258 {
2250 update_texture_fetch(); 2259 update_texture_fetch();
2251 set_startup_status(0.f + 0.25f * wearables_time / MAX_WEARABLES_TIME, 2260 set_startup_status(0.f + 0.25f * wearables_time / MAX_WEARABLES_TIME,
2252 "Downloading clothing...", 2261 LLTrans::getString("LoginDownloadingClothing").c_str(),
2253 gAgent.mMOTD.c_str()); 2262 gAgent.mMOTD.c_str());
2254 } 2263 }
2255 return do_normal_idle; 2264 return do_normal_idle;
@@ -2271,7 +2280,7 @@ BOOL idle_startup()
2271 gViewerWindow->showCursor(); 2280 gViewerWindow->showCursor();
2272 gViewerWindow->getWindow()->resetBusyCount(); 2281 gViewerWindow->getWindow()->resetBusyCount();
2273 gViewerWindow->getWindow()->setCursor(UI_CURSOR_ARROW); 2282 gViewerWindow->getWindow()->setCursor(UI_CURSOR_ARROW);
2274 //llinfos << "Done releasing bitmap" << llendl; 2283 LL_DEBUGS("AppInit") << "Done releasing bitmap" << LL_ENDL;
2275 gViewerWindow->setShowProgress(FALSE); 2284 gViewerWindow->setShowProgress(FALSE);
2276 gViewerWindow->setProgressCancelButtonVisible(FALSE, ""); 2285 gViewerWindow->setProgressCancelButtonVisible(FALSE, "");
2277 2286
@@ -2293,7 +2302,7 @@ BOOL idle_startup()
2293 if (gSavedSettings.getBOOL("StatsAutoRun")) 2302 if (gSavedSettings.getBOOL("StatsAutoRun"))
2294 { 2303 {
2295 LLUUID id; 2304 LLUUID id;
2296 llinfos << "Starting automatic playback" << llendl; 2305 LL_DEBUGS("AppInit") << "Starting automatic playback" << LL_ENDL;
2297 gAgentPilot.startPlayback(); 2306 gAgentPilot.startPlayback();
2298 } 2307 }
2299 2308
@@ -2309,9 +2318,9 @@ BOOL idle_startup()
2309 // Unmute audio if desired and setup volumes. 2318 // Unmute audio if desired and setup volumes.
2310 // This is a not-uncommon crash site, so surround it with 2319 // This is a not-uncommon crash site, so surround it with
2311 // llinfos output to aid diagnosis. 2320 // llinfos output to aid diagnosis.
2312 llinfos << "Doing first audio_update_volume..." << llendl; 2321 LL_INFOS("AppInit") << "Doing first audio_update_volume..." << LL_ENDL;
2313 audio_update_volume(); 2322 audio_update_volume();
2314 llinfos << "Done first audio_update_volume." << llendl; 2323 LL_INFOS("AppInit") << "Done first audio_update_volume." << LL_ENDL;
2315 2324
2316 // reset keyboard focus to sane state of pointing at world 2325 // reset keyboard focus to sane state of pointing at world
2317 gFocusMgr.setKeyboardFocus(NULL); 2326 gFocusMgr.setKeyboardFocus(NULL);
@@ -2320,10 +2329,12 @@ BOOL idle_startup()
2320 gDebugView->mFastTimerView->setVisible(TRUE); 2329 gDebugView->mFastTimerView->setVisible(TRUE);
2321#endif 2330#endif
2322 2331
2332 LLAppViewer::instance()->startMainloopTimeout();
2333
2323 return do_normal_idle; 2334 return do_normal_idle;
2324 } 2335 }
2325 2336
2326 llwarns << "Reached end of idle_startup for state " << LLStartUp::getStartupState() << llendl; 2337 LL_WARNS("AppInit") << "Reached end of idle_startup for state " << LLStartUp::getStartupState() << LL_ENDL;
2327 return do_normal_idle; 2338 return do_normal_idle;
2328} 2339}
2329 2340
@@ -2333,7 +2344,7 @@ BOOL idle_startup()
2333 2344
2334void login_show() 2345void login_show()
2335{ 2346{
2336 llinfos << "Initializing Login Screen" << llendl; 2347 LL_INFOS("AppInit") << "Initializing Login Screen" << LL_ENDL;
2337 2348
2338#ifdef LL_RELEASE_FOR_DOWNLOAD 2349#ifdef LL_RELEASE_FOR_DOWNLOAD
2339 BOOL bUseDebugLogin = gSavedSettings.getBOOL("UseDebugLogin"); 2350 BOOL bUseDebugLogin = gSavedSettings.getBOOL("UseDebugLogin");
@@ -2347,35 +2358,15 @@ void login_show()
2347 2358
2348 // UI textures have been previously loaded in doPreloadImages() 2359 // UI textures have been previously loaded in doPreloadImages()
2349 2360
2350 llinfos << "Setting Servers" << llendl; 2361 LL_DEBUGS("AppInit") << "Setting Servers" << LL_ENDL;
2351 2362
2352 if( GRID_INFO_OTHER == gGridChoice ) 2363 LLPanelLogin::addServer(LLViewerLogin::getInstance()->getGridLabel().c_str(), LLViewerLogin::getInstance()->getGridChoice());
2353 { 2364
2354 LLPanelLogin::addServer( gGridName.c_str(), GRID_INFO_OTHER ); 2365 LLViewerLogin* vl = LLViewerLogin::getInstance();
2355 } 2366 for(int grid_index = GRID_INFO_ADITI; grid_index < GRID_INFO_OTHER; ++grid_index)
2356 else
2357 { 2367 {
2358 LLPanelLogin::addServer( gGridInfo[gGridChoice].mLabel, gGridChoice ); 2368 LLPanelLogin::addServer(vl->getKnownGridLabel((EGridInfo)grid_index).c_str(), grid_index);
2359 } 2369 }
2360
2361 // Arg! We hate loops!
2362 LLPanelLogin::addServer( gGridInfo[GRID_INFO_ADITI].mLabel, GRID_INFO_ADITI );
2363 LLPanelLogin::addServer( gGridInfo[GRID_INFO_AGNI].mLabel, GRID_INFO_AGNI );
2364 LLPanelLogin::addServer( gGridInfo[GRID_INFO_ARUNA].mLabel, GRID_INFO_ARUNA );
2365 LLPanelLogin::addServer( gGridInfo[GRID_INFO_DURGA].mLabel, GRID_INFO_DURGA );
2366 LLPanelLogin::addServer( gGridInfo[GRID_INFO_GANGA].mLabel, GRID_INFO_GANGA );
2367 LLPanelLogin::addServer( gGridInfo[GRID_INFO_MITRA].mLabel, GRID_INFO_MITRA );
2368 LLPanelLogin::addServer( gGridInfo[GRID_INFO_MOHINI].mLabel, GRID_INFO_MOHINI );
2369 LLPanelLogin::addServer( gGridInfo[GRID_INFO_NANDI].mLabel, GRID_INFO_NANDI );
2370 LLPanelLogin::addServer( gGridInfo[GRID_INFO_RADHA].mLabel, GRID_INFO_RADHA );
2371 LLPanelLogin::addServer( gGridInfo[GRID_INFO_RAVI].mLabel, GRID_INFO_RAVI );
2372 LLPanelLogin::addServer( gGridInfo[GRID_INFO_SIVA].mLabel, GRID_INFO_SIVA );
2373 LLPanelLogin::addServer( gGridInfo[GRID_INFO_SHAKTI].mLabel, GRID_INFO_SHAKTI );
2374 LLPanelLogin::addServer( gGridInfo[GRID_INFO_SOMA].mLabel, GRID_INFO_SOMA );
2375 LLPanelLogin::addServer( gGridInfo[GRID_INFO_UMA].mLabel, GRID_INFO_UMA );
2376 LLPanelLogin::addServer( gGridInfo[GRID_INFO_VAAK].mLabel, GRID_INFO_VAAK );
2377 LLPanelLogin::addServer( gGridInfo[GRID_INFO_YAMI].mLabel, GRID_INFO_YAMI );
2378 LLPanelLogin::addServer( gGridInfo[GRID_INFO_LOCAL].mLabel, GRID_INFO_LOCAL );
2379} 2370}
2380 2371
2381// Callback for when login screen is closed. Option 0 = connect, option 1 = quit. 2372// Callback for when login screen is closed. Option 0 = connect, option 1 = quit.
@@ -2416,7 +2407,7 @@ void login_callback(S32 option, void *userdata)
2416 } 2407 }
2417 else 2408 else
2418 { 2409 {
2419 llwarns << "Unknown login button clicked" << llendl; 2410 LL_WARNS("AppInit") << "Unknown login button clicked" << LL_ENDL;
2420 } 2411 }
2421} 2412}
2422 2413
@@ -2437,7 +2428,7 @@ LLString load_password_from_disk()
2437 2428
2438 std::string filepath = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, 2429 std::string filepath = gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS,
2439 "password.dat"); 2430 "password.dat");
2440 FILE* fp = LLFile::fopen(filepath.c_str(), "rb"); /* Flawfinder: ignore */ 2431 LLFILE* fp = LLFile::fopen(filepath.c_str(), "rb"); /* Flawfinder: ignore */
2441 if (!fp) 2432 if (!fp)
2442 { 2433 {
2443 return hashed_password; 2434 return hashed_password;
@@ -2484,7 +2475,7 @@ void save_password_to_disk(const char* hashed_password)
2484 } 2475 }
2485 else 2476 else
2486 { 2477 {
2487 FILE* fp = LLFile::fopen(filepath.c_str(), "wb"); /* Flawfinder: ignore */ 2478 LLFILE* fp = LLFile::fopen(filepath.c_str(), "wb"); /* Flawfinder: ignore */
2488 if (!fp) 2479 if (!fp)
2489 { 2480 {
2490 return; 2481 return;
@@ -2501,7 +2492,7 @@ void save_password_to_disk(const char* hashed_password)
2501 2492
2502 if (fwrite(buffer, HASHED_LENGTH, 1, fp) != 1) 2493 if (fwrite(buffer, HASHED_LENGTH, 1, fp) != 1)
2503 { 2494 {
2504 llwarns << "Short write" << llendl; 2495 LL_WARNS("AppInit") << "Short write" << LL_ENDL;
2505 } 2496 }
2506 2497
2507 fclose(fp); 2498 fclose(fp);
@@ -2551,7 +2542,7 @@ void first_run_dialog_callback(S32 option, void* userdata)
2551{ 2542{
2552 if (0 == option) 2543 if (0 == option)
2553 { 2544 {
2554 llinfos << "First run dialog cancelling" << llendl; 2545 LL_DEBUGS("AppInit") << "First run dialog cancelling" << LL_ENDL;
2555 LLWeb::loadURL( CREATE_ACCOUNT_URL ); 2546 LLWeb::loadURL( CREATE_ACCOUNT_URL );
2556 } 2547 }
2557 2548
@@ -2584,7 +2575,7 @@ void login_alert_status(S32 option, void* user_data)
2584 LLStartUp::setStartupState( STATE_LOGIN_CLEANUP ); 2575 LLStartUp::setStartupState( STATE_LOGIN_CLEANUP );
2585 break; 2576 break;
2586 default: 2577 default:
2587 llwarns << "Missing case in login_alert_status switch" << llendl; 2578 LL_WARNS("AppInit") << "Missing case in login_alert_status switch" << LL_ENDL;
2588 } 2579 }
2589 2580
2590 LLPanelLogin::giveFocus(); 2581 LLPanelLogin::giveFocus();
@@ -2692,7 +2683,7 @@ void update_dialog_callback(S32 option, void *userdata)
2692#endif 2683#endif
2693 // *TODO change userserver to be grid on both viewer and sim, since 2684 // *TODO change userserver to be grid on both viewer and sim, since
2694 // userserver no longer exists. 2685 // userserver no longer exists.
2695 query_map["userserver"] = gGridName; 2686 query_map["userserver"] = LLViewerLogin::getInstance()->getGridLabel();
2696 query_map["channel"] = gSavedSettings.getString("VersionChannelName"); 2687 query_map["channel"] = gSavedSettings.getString("VersionChannelName");
2697 // *TODO constantize this guy 2688 // *TODO constantize this guy
2698 LLURI update_url = LLURI::buildHTTP("secondlife.com", 80, "update.php", query_map); 2689 LLURI update_url = LLURI::buildHTTP("secondlife.com", 80, "update.php", query_map);
@@ -2702,7 +2693,7 @@ void update_dialog_callback(S32 option, void *userdata)
2702 if (update_exe_path.empty()) 2693 if (update_exe_path.empty())
2703 { 2694 {
2704 // We're hosed, bail 2695 // We're hosed, bail
2705 llwarns << "LLDir::getTempFilename() failed" << llendl; 2696 LL_WARNS("AppInit") << "LLDir::getTempFilename() failed" << LL_ENDL;
2706 LLAppViewer::instance()->forceQuit(); 2697 LLAppViewer::instance()->forceQuit();
2707 return; 2698 return;
2708 } 2699 }
@@ -2713,14 +2704,14 @@ void update_dialog_callback(S32 option, void *userdata)
2713 updater_source += gDirUtilp->getDirDelimiter(); 2704 updater_source += gDirUtilp->getDirDelimiter();
2714 updater_source += "updater.exe"; 2705 updater_source += "updater.exe";
2715 2706
2716 llinfos << "Calling CopyFile source: " << updater_source.c_str() 2707 LL_DEBUGS("AppInit") << "Calling CopyFile source: " << updater_source.c_str()
2717 << " dest: " << update_exe_path 2708 << " dest: " << update_exe_path
2718 << llendl; 2709 << LL_ENDL;
2719 2710
2720 2711
2721 if (!CopyFileA(updater_source.c_str(), update_exe_path.c_str(), FALSE)) 2712 if (!CopyFileA(updater_source.c_str(), update_exe_path.c_str(), FALSE))
2722 { 2713 {
2723 llinfos << "Unable to copy the updater!" << llendl; 2714 LL_WARNS("AppInit") << "Unable to copy the updater!" << LL_ENDL;
2724 LLAppViewer::instance()->forceQuit(); 2715 LLAppViewer::instance()->forceQuit();
2725 return; 2716 return;
2726 } 2717 }
@@ -2758,14 +2749,14 @@ void update_dialog_callback(S32 option, void *userdata)
2758 params << " -program \"" << program_name << "\""; 2749 params << " -program \"" << program_name << "\"";
2759 } 2750 }
2760 2751
2761 llinfos << "Calling updater: " << update_exe_path << " " << params.str() << llendl; 2752 LL_DEBUGS("AppInit") << "Calling updater: " << update_exe_path << " " << params.str() << LL_ENDL;
2762 2753
2763 //Explicitly remove the marker file, otherwise we pass the lock onto the child process and things get weird. 2754 //Explicitly remove the marker file, otherwise we pass the lock onto the child process and things get weird.
2764 LLAppViewer::instance()->removeMarkerFile(); // In case updater fails 2755 LLAppViewer::instance()->removeMarkerFile(); // In case updater fails
2765 2756
2766 // Use spawn() to run asynchronously 2757 // Use spawn() to run asynchronously
2767 int retval = _spawnl(_P_NOWAIT, update_exe_path.c_str(), update_exe_path.c_str(), params.str().c_str(), NULL); 2758 int retval = _spawnl(_P_NOWAIT, update_exe_path.c_str(), update_exe_path.c_str(), params.str().c_str(), NULL);
2768 llinfos << "Spawn returned " << retval << llendl; 2759 LL_DEBUGS("AppInit") << "Spawn returned " << retval << LL_ENDL;
2769 2760
2770#elif LL_DARWIN 2761#elif LL_DARWIN
2771 // if a sim name was passed in via command line parameter (typically through a SLURL) 2762 // if a sim name was passed in via command line parameter (typically through a SLURL)
@@ -2783,11 +2774,8 @@ void update_dialog_callback(S32 option, void *userdata)
2783 update_exe_path += LLAppViewer::instance()->getSecondLifeTitle(); 2774 update_exe_path += LLAppViewer::instance()->getSecondLifeTitle();
2784 update_exe_path += "\" &"; 2775 update_exe_path += "\" &";
2785 2776
2786 llinfos << "Calling updater: " << update_exe_path << llendl; 2777 LL_DEBUGS("AppInit") << "Calling updater: " << update_exe_path << LL_ENDL;
2787 2778
2788 // *REMOVE:Mani The following call is handled through ~LLAppViewer.
2789 // remove_marker_file(); // In case updater fails
2790
2791 // Run the auto-updater. 2779 // Run the auto-updater.
2792 system(update_exe_path.c_str()); /* Flawfinder: ignore */ 2780 system(update_exe_path.c_str()); /* Flawfinder: ignore */
2793 2781
@@ -2795,10 +2783,6 @@ void update_dialog_callback(S32 option, void *userdata)
2795 OSMessageBox("Automatic updating is not yet implemented for Linux.\n" 2783 OSMessageBox("Automatic updating is not yet implemented for Linux.\n"
2796 "Please download the latest version from www.secondlife.com.", 2784 "Please download the latest version from www.secondlife.com.",
2797 NULL, OSMB_OK); 2785 NULL, OSMB_OK);
2798
2799 // *REMOVE:Mani The following call is handled through ~LLAppViewer.
2800 // remove_marker_file();
2801
2802#endif 2786#endif
2803 LLAppViewer::instance()->forceQuit(); 2787 LLAppViewer::instance()->forceQuit();
2804} 2788}
@@ -2813,7 +2797,7 @@ void use_circuit_callback(void**, S32 result)
2813 if (result) 2797 if (result)
2814 { 2798 {
2815 // Make sure user knows something bad happened. JC 2799 // Make sure user knows something bad happened. JC
2816 llinfos << "Backing up to login screen!" << llendl; 2800 LL_WARNS("AppInit") << "Backing up to login screen!" << LL_ENDL;
2817 gViewerWindow->alertXml("LoginPacketNeverReceived", 2801 gViewerWindow->alertXml("LoginPacketNeverReceived",
2818 login_alert_status, NULL); 2802 login_alert_status, NULL);
2819 reset_login(); 2803 reset_login();
@@ -2981,7 +2965,7 @@ void register_viewer_callbacks(LLMessageSystem* msg)
2981 //msg->setHandlerFunc("DirPicksReply", LLPanelDirBrowser::processDirPicksReply); 2965 //msg->setHandlerFunc("DirPicksReply", LLPanelDirBrowser::processDirPicksReply);
2982 msg->setHandlerFunc("DirClassifiedReply", LLPanelDirBrowser::processDirClassifiedReply); 2966 msg->setHandlerFunc("DirClassifiedReply", LLPanelDirBrowser::processDirClassifiedReply);
2983 msg->setHandlerFunc("DirLandReply", LLPanelDirBrowser::processDirLandReply); 2967 msg->setHandlerFunc("DirLandReply", LLPanelDirBrowser::processDirLandReply);
2984 msg->setHandlerFunc("DirPopularReply",LLPanelDirBrowser::processDirPopularReply); 2968 //msg->setHandlerFunc("DirPopularReply",LLPanelDirBrowser::processDirPopularReply);
2985 2969
2986 msg->setHandlerFunc("AvatarPickerReply", LLFloaterAvatarPicker::processAvatarPickerReply); 2970 msg->setHandlerFunc("AvatarPickerReply", LLFloaterAvatarPicker::processAvatarPickerReply);
2987 2971
@@ -3660,10 +3644,10 @@ void init_start_screen(S32 location_id)
3660 if (gStartImageGL.notNull()) 3644 if (gStartImageGL.notNull())
3661 { 3645 {
3662 gStartImageGL = NULL; 3646 gStartImageGL = NULL;
3663 llinfos << "re-initializing start screen" << llendl; 3647 LL_INFOS("AppInit") << "re-initializing start screen" << LL_ENDL;
3664 } 3648 }
3665 3649
3666 llinfos << "Loading startup bitmap..." << llendl; 3650 LL_DEBUGS("AppInit") << "Loading startup bitmap..." << LL_ENDL;
3667 3651
3668 LLString temp_str = gDirUtilp->getLindenUserDir() + gDirUtilp->getDirDelimiter(); 3652 LLString temp_str = gDirUtilp->getLindenUserDir() + gDirUtilp->getDirDelimiter();
3669 3653
@@ -3682,12 +3666,12 @@ void init_start_screen(S32 location_id)
3682 // driver bug 3666 // driver bug
3683 if(!gSavedSettings.getBOOL("UseStartScreen")) 3667 if(!gSavedSettings.getBOOL("UseStartScreen"))
3684 { 3668 {
3685 llinfos << "Bitmap load disabled" << llendl; 3669 LL_INFOS("AppInit") << "Bitmap load disabled" << LL_ENDL;
3686 return; 3670 return;
3687 } 3671 }
3688 else if(!start_image_bmp->load(temp_str) ) 3672 else if(!start_image_bmp->load(temp_str) )
3689 { 3673 {
3690 llinfos << "Bitmap load failed" << llendl; 3674 LL_WARNS("AppInit") << "Bitmap load failed" << LL_ENDL;
3691 return; 3675 return;
3692 } 3676 }
3693 3677
@@ -3698,7 +3682,7 @@ void init_start_screen(S32 location_id)
3698 LLPointer<LLImageRaw> raw = new LLImageRaw; 3682 LLPointer<LLImageRaw> raw = new LLImageRaw;
3699 if (!start_image_bmp->decode(raw, 0.0f)) 3683 if (!start_image_bmp->decode(raw, 0.0f))
3700 { 3684 {
3701 llinfos << "Bitmap decode failed" << llendl; 3685 LL_WARNS("AppInit") << "Bitmap decode failed" << LL_ENDL;
3702 gStartImageGL = NULL; 3686 gStartImageGL = NULL;
3703 return; 3687 return;
3704 } 3688 }
@@ -3711,7 +3695,7 @@ void init_start_screen(S32 location_id)
3711// frees the bitmap 3695// frees the bitmap
3712void release_start_screen() 3696void release_start_screen()
3713{ 3697{
3714 //llinfos << "Releasing bitmap..." << llendl; 3698 LL_DEBUGS("AppInit") << "Releasing bitmap..." << LL_ENDL;
3715 gStartImageGL = NULL; 3699 gStartImageGL = NULL;
3716} 3700}
3717 3701
@@ -3719,7 +3703,7 @@ void release_start_screen()
3719// static 3703// static
3720void LLStartUp::setStartupState( S32 state ) 3704void LLStartUp::setStartupState( S32 state )
3721{ 3705{
3722 llinfos << "Startup state changing from " << gStartupState << " to " << state << llendl; 3706 LL_INFOS("AppInit") << "Startup state changing from " << gStartupState << " to " << state << LL_ENDL;
3723 gStartupState = state; 3707 gStartupState = state;
3724} 3708}
3725 3709
diff --git a/linden/indra/newview/llstatgraph.cpp b/linden/indra/newview/llstatgraph.cpp
index c9969a2..9f219e2 100644
--- a/linden/indra/newview/llstatgraph.cpp
+++ b/linden/indra/newview/llstatgraph.cpp
@@ -32,7 +32,7 @@
32#include "llviewerprecompiledheaders.h" 32#include "llviewerprecompiledheaders.h"
33 33
34#include "llstatgraph.h" 34#include "llstatgraph.h"
35#include "llglimmediate.h" 35#include "llrender.h"
36 36
37#include "llmath.h" 37#include "llmath.h"
38#include "llui.h" 38#include "llui.h"
diff --git a/linden/indra/newview/llstatusbar.cpp b/linden/indra/newview/llstatusbar.cpp
index c11d46d..42acdcc 100644
--- a/linden/indra/newview/llstatusbar.cpp
+++ b/linden/indra/newview/llstatusbar.cpp
@@ -429,26 +429,18 @@ void LLStatusBar::refresh()
429 childSetVisible("restrictpush", FALSE); 429 childSetVisible("restrictpush", FALSE);
430 } 430 }
431 431
432 BOOL voice_enabled = gVoiceClient->voiceEnabled();
433 BOOL have_voice = parcel && parcel->getVoiceEnabled(); 432 BOOL have_voice = parcel && parcel->getVoiceEnabled();
434 if (!voice_enabled) 433 if (have_voice)
435 { 434 {
436 childSetVisible("status_no_voice", FALSE); 435 childSetVisible("status_no_voice", FALSE);
437 } 436 }
438 else 437 else
439 { 438 {
440 if (have_voice) 439 childSetVisible("status_no_voice", TRUE);
441 { 440 childGetRect( "status_no_voice", buttonRect );
442 childSetVisible("status_no_voice", FALSE); 441 r.setOriginAndSize( x, y, buttonRect.getWidth(), buttonRect.getHeight());
443 } 442 childSetRect( "status_no_voice", r );
444 else if (!have_voice) 443 x += buttonRect.getWidth();
445 {
446 childSetVisible("status_no_voice", TRUE);
447 childGetRect( "status_no_voice", buttonRect );
448 r.setOriginAndSize( x, y, buttonRect.getWidth(), buttonRect.getHeight());
449 childSetRect( "status_no_voice", r );
450 x += buttonRect.getWidth();
451 }
452 } 444 }
453 445
454 BOOL canBuyLand = parcel 446 BOOL canBuyLand = parcel
diff --git a/linden/indra/newview/llstylemap.cpp b/linden/indra/newview/llstylemap.cpp
new file mode 100644
index 0000000..a8c8bf7
--- /dev/null
+++ b/linden/indra/newview/llstylemap.cpp
@@ -0,0 +1,75 @@
1/**
2 * @file llstylemap.cpp
3 * @brief LLStyleMap class implementation
4 *
5 * $LicenseInfo:firstyear=2002&license=viewergpl$
6 *
7 * Copyright (c) 2002-2008, Linden Research, Inc.
8 *
9 * Second Life Viewer Source Code
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
12 * ("GPL"), unless you have obtained a separate licensing agreement
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
15 * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
16 *
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
19 * in the file doc/FLOSS-exception.txt in this software distribution, or
20 * online at http://secondlifegrid.net/programs/open_source/licensing/flossexception
21 *
22 * By copying, modifying or distributing this software, you acknowledge
23 * that you have read and understood your obligations described above,
24 * and agree to abide by those obligations.
25 *
26 * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
27 * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
28 * COMPLETENESS OR PERFORMANCE.
29 * $/LicenseInfo$
30 */
31
32#include "llviewerprecompiledheaders.h"
33
34#include "llstylemap.h"
35#include "llstring.h"
36#include "llui.h"
37#include "llviewercontrol.h"
38#include "llagent.h"
39
40LLStyleMap::LLStyleMap()
41{
42}
43
44LLStyleMap::~LLStyleMap()
45{
46}
47
48LLStyleMap &LLStyleMap::instance()
49{
50 static LLStyleMap mStyleMap;
51 return mStyleMap;
52}
53
54// This is similar to the [] accessor except that if the entry doesn't already exist,
55// then this will create the entry.
56const LLStyleSP &LLStyleMap::lookup(const LLUUID &source)
57{
58 // Find this style in the map or add it if not. This map holds links to residents' profiles.
59 if (find(source) == end())
60 {
61 LLStyleSP style(new LLStyle);
62 style->setVisible(true);
63 style->setFontName(LLString::null);
64 if (source != gAgent.getID() && source != LLUUID::null)
65 {
66 style->setColor(gSavedSettings.getColor4("HTMLLinkColor"));
67 LLString link = llformat("secondlife:///app/agent/%s/about",source.asString().c_str());
68 style->setLinkHREF(link);
69 }
70 else
71 style->setColor(LLColor4::white);
72 (*this)[source] = style;
73 }
74 return (*this)[source];
75}
diff --git a/linden/indra/llwindow/llwindowsolaris.cpp b/linden/indra/newview/llstylemap.h
index 54a77ae..2e9339c 100644
--- a/linden/indra/llwindow/llwindowsolaris.cpp
+++ b/linden/indra/newview/llstylemap.h
@@ -1,10 +1,10 @@
1/** 1/**
2 * @file fmodwrapper.cpp 2 * @file LLStyleMap.h
3 * @brief dummy source file for building a shared library to wrap libfmod.a 3 * @brief LLStyleMap class definition
4 * 4 *
5 * $LicenseInfo:firstyear=2005&license=viewergpl$ 5 * $LicenseInfo:firstyear=2002&license=viewergpl$
6 * 6 *
7 * Copyright (c) 2005-2008, Linden Research, Inc. 7 * Copyright (c) 2002-2008, 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
@@ -29,33 +29,26 @@
29 * $/LicenseInfo$ 29 * $/LicenseInfo$
30 */ 30 */
31 31
32#if LL_SOLARIS
33 32
34#include "linden_common.h" 33#ifndef LL_LLSTYLE_MAP_H
35#include "indra_constants.h" 34#define LL_LLSTYLE_MAP_H
36 35
37#include "llwindowsolaris.h" 36#include "llstyle.h"
38#include "llgl.h" 37#include "lluuid.h"
39#include "llglheaders.h"
40
41//
42// LLWindowSolaris
43//
44LLWindowSolaris::LLWindowSolaris(char *title, char *name, S32 x, S32 y, S32 width, S32 height,
45 U32 flags, BOOL fullscreen, BOOL clearBg,
46 BOOL disable_vsync, BOOL use_gl, BOOL ignore_pixel_depth)
47 : LLWindow(fullscreen, flags)
48{
49 llerrs << "Solaris window not yet supported" << llendl;
50}
51 38
39// Lightweight class for holding and managing mappings between UUIDs and links.
40// Used (for example) to create clickable name links off of IM chat.
52 41
53LLWindowSolaris::~LLWindowSolaris() 42typedef std::map<LLUUID, LLStyleSP> style_map_t;
54{
55}
56 43
57void LLWindowSolaris::swapBuffers() 44class LLStyleMap : public style_map_t
58{ 45{
59} 46public:
60 47 LLStyleMap();
61#endif // LL_SOLARIS 48 ~LLStyleMap();
49 // Just like the [] accessor but it will add the entry in if it doesn't exist.
50 const LLStyleSP &lookup(const LLUUID &source);
51 static LLStyleMap &instance();
52};
53
54#endif // LL_LLSTYLE_MAP_H
diff --git a/linden/indra/newview/llsurfacepatch.cpp b/linden/indra/newview/llsurfacepatch.cpp
index 5b03c98..42aea9e 100644
--- a/linden/indra/newview/llsurfacepatch.cpp
+++ b/linden/indra/newview/llsurfacepatch.cpp
@@ -206,10 +206,11 @@ LLVector2 LLSurfacePatch::getTexCoords(const U32 x, const U32 y) const
206void LLSurfacePatch::eval(const U32 x, const U32 y, const U32 stride, LLVector3 *vertex, LLVector3 *normal, 206void LLSurfacePatch::eval(const U32 x, const U32 y, const U32 stride, LLVector3 *vertex, LLVector3 *normal,
207 LLVector2 *tex0, LLVector2 *tex1) 207 LLVector2 *tex0, LLVector2 *tex1)
208{ 208{
209 if (!mSurfacep || !mSurfacep->getRegion()) 209 if (!mSurfacep || !mSurfacep->getRegion() || !mSurfacep->getGridsPerEdge())
210 { 210 {
211 return; // failsafe 211 return; // failsafe
212 } 212 }
213 llassert_always(vertex && normal && tex0 && tex1);
213 214
214 U32 surface_stride = mSurfacep->getGridsPerEdge(); 215 U32 surface_stride = mSurfacep->getGridsPerEdge();
215 U32 point_offset = x + y*surface_stride; 216 U32 point_offset = x + y*surface_stride;
diff --git a/linden/indra/newview/lltexlayer.cpp b/linden/indra/newview/lltexlayer.cpp
index 66d9a33..0e4c9c2 100644
--- a/linden/indra/newview/lltexlayer.cpp
+++ b/linden/indra/newview/lltexlayer.cpp
@@ -52,7 +52,7 @@
52#include "llxmltree.h" 52#include "llxmltree.h"
53#include "pipeline.h" 53#include "pipeline.h"
54#include "v4coloru.h" 54#include "v4coloru.h"
55#include "llglimmediate.h" 55#include "llrender.h"
56 56
57//#include "../tools/imdebug/imdebug.h" 57//#include "../tools/imdebug/imdebug.h"
58 58
@@ -239,6 +239,9 @@ BOOL LLTexLayerSetBuffer::render()
239{ 239{
240 U8* baked_bump_data = NULL; 240 U8* baked_bump_data = NULL;
241 241
242 // Default color mask for tex layer render
243 gGL.setColorMask(true, true);
244
242 // do we need to upload, and do we have sufficient data to create an uploadable composite? 245 // do we need to upload, and do we have sufficient data to create an uploadable composite?
243 // When do we upload the texture if gAgent.mNumPendingQueries is non-zero? 246 // When do we upload the texture if gAgent.mNumPendingQueries is non-zero?
244 BOOL upload_now = (gAgent.mNumPendingQueries == 0 && mNeedsUpload && mTexLayerSet->isLocalTextureDataFinal()); 247 BOOL upload_now = (gAgent.mNumPendingQueries == 0 && mNeedsUpload && mTexLayerSet->isLocalTextureDataFinal());
@@ -292,8 +295,8 @@ BOOL LLTexLayerSetBuffer::render()
292 } 295 }
293 296
294 // reset GL state 297 // reset GL state
295 glColorMask( GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE ); 298 gGL.setColorMask(true, true);
296 gGL.blendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA ); 299 gGL.setSceneBlendType(LLRender::BT_ALPHA);
297 300
298 // we have valid texture data now 301 // we have valid texture data now
299 mInitialized = TRUE; 302 mInitialized = TRUE;
@@ -756,6 +759,7 @@ BOOL LLTexLayerSet::render( S32 x, S32 y, S32 width, S32 height )
756 759
757 LLGLSUIDefault gls_ui; 760 LLGLSUIDefault gls_ui;
758 LLGLDepthTest gls_depth(GL_FALSE, GL_FALSE); 761 LLGLDepthTest gls_depth(GL_FALSE, GL_FALSE);
762 gGL.setColorMask(true, true);
759 763
760 // composite color layers 764 // composite color layers
761 for( layer_list_t::iterator iter = mLayerList.begin(); iter != mLayerList.end(); iter++ ) 765 for( layer_list_t::iterator iter = mLayerList.begin(); iter != mLayerList.end(); iter++ )
@@ -774,8 +778,8 @@ BOOL LLTexLayerSet::render( S32 x, S32 y, S32 width, S32 height )
774 { 778 {
775 LLGLSNoAlphaTest gls_no_alpha_test; 779 LLGLSNoAlphaTest gls_no_alpha_test;
776 gGL.flush(); 780 gGL.flush();
777 glColorMask( GL_FALSE, GL_FALSE, GL_FALSE, GL_TRUE ); 781 gGL.setColorMask(false, true);
778 gGL.blendFunc( GL_ONE, GL_ZERO ); 782 gGL.setSceneBlendType(LLRender::BT_REPLACE);
779 783
780 { 784 {
781 LLImageGL* image_gl = gTexStaticImageList.getImageGL( getInfo()->mStaticAlphaFileName, TRUE ); 785 LLImageGL* image_gl = gTexStaticImageList.getImageGL( getInfo()->mStaticAlphaFileName, TRUE );
@@ -793,8 +797,8 @@ BOOL LLTexLayerSet::render( S32 x, S32 y, S32 width, S32 height )
793 LLImageGL::unbindTexture(0, GL_TEXTURE_2D); 797 LLImageGL::unbindTexture(0, GL_TEXTURE_2D);
794 798
795 gGL.flush(); 799 gGL.flush();
796 glColorMask( GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE ); 800 gGL.setColorMask(true, true);
797 gGL.blendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA ); 801 gGL.setSceneBlendType(LLRender::BT_ALPHA);
798 } 802 }
799 else 803 else
800 if( getInfo()->mClearAlpha ) 804 if( getInfo()->mClearAlpha )
@@ -803,12 +807,12 @@ BOOL LLTexLayerSet::render( S32 x, S32 y, S32 width, S32 height )
803 LLGLSNoTextureNoAlphaTest gls_no_alpha; 807 LLGLSNoTextureNoAlphaTest gls_no_alpha;
804 gGL.color4f( 0.f, 0.f, 0.f, 1.f ); 808 gGL.color4f( 0.f, 0.f, 0.f, 1.f );
805 gGL.flush(); 809 gGL.flush();
806 glColorMask( GL_FALSE, GL_FALSE, GL_FALSE, GL_TRUE ); 810 gGL.setColorMask(false, true);
807 811
808 gl_rect_2d_simple( width, height ); 812 gl_rect_2d_simple( width, height );
809 813
810 gGL.flush(); 814 gGL.flush();
811 glColorMask( GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE ); 815 gGL.setColorMask(true, true);
812 } 816 }
813 stop_glerror(); 817 stop_glerror();
814 818
@@ -836,11 +840,11 @@ BOOL LLTexLayerSet::renderBump( S32 x, S32 y, S32 width, S32 height )
836 // Set the alpha channel to one (clean up after previous blending) 840 // Set the alpha channel to one (clean up after previous blending)
837 LLGLSNoTextureNoAlphaTest gls_no_texture_no_alpha; 841 LLGLSNoTextureNoAlphaTest gls_no_texture_no_alpha;
838 gGL.color4f( 0.f, 0.f, 0.f, 1.f ); 842 gGL.color4f( 0.f, 0.f, 0.f, 1.f );
839 glColorMask( GL_FALSE, GL_FALSE, GL_FALSE, GL_TRUE ); 843 gGL.setColorMask(false, true);
840 844
841 gl_rect_2d_simple( width, height ); 845 gl_rect_2d_simple( width, height );
842 846
843 glColorMask( GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE ); 847 gGL.setColorMask(true, true);
844 stop_glerror(); 848 stop_glerror();
845 849
846 return success; 850 return success;
@@ -1330,7 +1334,7 @@ BOOL LLTexLayer::render( S32 x, S32 y, S32 width, S32 height )
1330 renderAlphaMasks( x, y, width, height, &net_color ); 1334 renderAlphaMasks( x, y, width, height, &net_color );
1331 alpha_mask_specified = TRUE; 1335 alpha_mask_specified = TRUE;
1332 gGL.flush(); 1336 gGL.flush();
1333 gGL.blendFunc( GL_DST_ALPHA, GL_ONE_MINUS_DST_ALPHA ); 1337 gGL.blendFunc(LLRender::BF_DEST_ALPHA, LLRender::BF_ONE_MINUS_DEST_ALPHA);
1334 } 1338 }
1335 1339
1336 gGL.color4fv( net_color.mV); 1340 gGL.color4fv( net_color.mV);
@@ -1338,7 +1342,7 @@ BOOL LLTexLayer::render( S32 x, S32 y, S32 width, S32 height )
1338 if( getInfo()->mWriteAllChannels ) 1342 if( getInfo()->mWriteAllChannels )
1339 { 1343 {
1340 gGL.flush(); 1344 gGL.flush();
1341 gGL.blendFunc( GL_ONE, GL_ZERO ); 1345 gGL.setSceneBlendType(LLRender::BT_REPLACE);
1342 } 1346 }
1343 1347
1344 if( (getInfo()->mLocalTexture != -1) && !getInfo()->mUseLocalTextureAlphaOnly ) 1348 if( (getInfo()->mLocalTexture != -1) && !getInfo()->mUseLocalTextureAlphaOnly )
@@ -1401,7 +1405,7 @@ BOOL LLTexLayer::render( S32 x, S32 y, S32 width, S32 height )
1401 { 1405 {
1402 // Restore standard blend func value 1406 // Restore standard blend func value
1403 gGL.flush(); 1407 gGL.flush();
1404 gGL.blendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA ); 1408 gGL.setSceneBlendType(LLRender::BT_ALPHA);
1405 stop_glerror(); 1409 stop_glerror();
1406 } 1410 }
1407 1411
@@ -1506,7 +1510,7 @@ BOOL LLTexLayer::renderAlphaMasks( S32 x, S32 y, S32 width, S32 height, LLColor4
1506 1510
1507 llassert( !mParamAlphaList.empty() ); 1511 llassert( !mParamAlphaList.empty() );
1508 1512
1509 glColorMask( GL_FALSE, GL_FALSE, GL_FALSE, GL_TRUE ); 1513 gGL.setColorMask(false, true);
1510 1514
1511 alpha_list_t::iterator iter = mParamAlphaList.begin(); 1515 alpha_list_t::iterator iter = mParamAlphaList.begin();
1512 LLTexLayerParamAlpha* first_param = *iter; 1516 LLTexLayerParamAlpha* first_param = *iter;
@@ -1518,7 +1522,7 @@ BOOL LLTexLayer::renderAlphaMasks( S32 x, S32 y, S32 width, S32 height, LLColor4
1518 1522
1519 // Clear the alpha 1523 // Clear the alpha
1520 gGL.flush(); 1524 gGL.flush();
1521 gGL.blendFunc( GL_ONE, GL_ZERO ); 1525 gGL.setSceneBlendType(LLRender::BT_REPLACE);
1522 1526
1523 gGL.color4f( 0.f, 0.f, 0.f, 0.f ); 1527 gGL.color4f( 0.f, 0.f, 0.f, 0.f );
1524 gl_rect_2d_simple( width, height ); 1528 gl_rect_2d_simple( width, height );
@@ -1536,7 +1540,7 @@ BOOL LLTexLayer::renderAlphaMasks( S32 x, S32 y, S32 width, S32 height, LLColor4
1536 1540
1537 // Approximates a min() function 1541 // Approximates a min() function
1538 gGL.flush(); 1542 gGL.flush();
1539 gGL.blendFunc( GL_DST_ALPHA, GL_ZERO ); 1543 gGL.blendFunc(LLRender::BF_DEST_ALPHA, LLRender::BF_ZERO);
1540 1544
1541 // Accumulate the alpha component of the texture 1545 // Accumulate the alpha component of the texture
1542 if( getInfo()->mLocalTexture != -1 ) 1546 if( getInfo()->mLocalTexture != -1 )
@@ -1601,7 +1605,7 @@ BOOL LLTexLayer::renderAlphaMasks( S32 x, S32 y, S32 width, S32 height, LLColor4
1601 1605
1602 LLGLSUIDefault gls_ui; 1606 LLGLSUIDefault gls_ui;
1603 1607
1604 glColorMask( GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE ); 1608 gGL.setColorMask(true, true);
1605 1609
1606 if (!mMorphMasksValid && !mMaskedMorphs.empty()) 1610 if (!mMorphMasksValid && !mMaskedMorphs.empty())
1607 { 1611 {
@@ -1963,11 +1967,11 @@ BOOL LLTexLayerParamAlpha::render( S32 x, S32 y, S32 width, S32 height )
1963 gGL.flush(); 1967 gGL.flush();
1964 if( getInfo()->mMultiplyBlend ) 1968 if( getInfo()->mMultiplyBlend )
1965 { 1969 {
1966 gGL.blendFunc( GL_DST_ALPHA, GL_ZERO ); // Multiplication: approximates a min() function 1970 gGL.blendFunc(LLRender::BF_DEST_ALPHA, LLRender::BF_ZERO); // Multiplication: approximates a min() function
1967 } 1971 }
1968 else 1972 else
1969 { 1973 {
1970 gGL.blendFunc( GL_ONE, GL_ONE ); // Addition: approximates a max() function 1974 gGL.setSceneBlendType(LLRender::BT_ADD); // Addition: approximates a max() function
1971 } 1975 }
1972 1976
1973 if( !getInfo()->mStaticImageFileName.empty() && !mStaticImageInvalid) 1977 if( !getInfo()->mStaticImageFileName.empty() && !mStaticImageInvalid)
diff --git a/linden/indra/newview/lltexturecache.cpp b/linden/indra/newview/lltexturecache.cpp
index c31fbba..ab85b32 100644
--- a/linden/indra/newview/lltexturecache.cpp
+++ b/linden/indra/newview/lltexturecache.cpp
@@ -1023,8 +1023,8 @@ S64 LLTextureCache::initCache(ELLPath location, S64 max_size, BOOL read_only)
1023 sCacheMaxTexturesSize = max_size; 1023 sCacheMaxTexturesSize = max_size;
1024 max_size -= sCacheMaxTexturesSize; 1024 max_size -= sCacheMaxTexturesSize;
1025 1025
1026 llinfos << "TEXTURE CACHE: Headers: " << sCacheMaxEntries 1026 LL_INFOS("TextureCache") << "Headers: " << sCacheMaxEntries
1027 << " Textures size: " << sCacheMaxTexturesSize/(1024*1024) << " MB" << llendl; 1027 << " Textures size: " << sCacheMaxTexturesSize/(1024*1024) << " MB" << LL_ENDL;
1028 1028
1029 setDirNames(location); 1029 setDirNames(location);
1030 1030
@@ -1161,7 +1161,7 @@ void LLTextureCache::purgeTextures(bool validate)
1161 S32 num_entries = filesize / sizeof(Entry); 1161 S32 num_entries = filesize / sizeof(Entry);
1162 if (num_entries * (S32)sizeof(Entry) != filesize) 1162 if (num_entries * (S32)sizeof(Entry) != filesize)
1163 { 1163 {
1164 llwarns << "Bad cache file: " << mTexturesDirEntriesFileName << " Purging." << llendl; 1164 LL_WARNS("TextureCache") << "Bad cache file: " << mTexturesDirEntriesFileName << " Purging." << LL_ENDL;
1165 purgeAllTextures(false); 1165 purgeAllTextures(false);
1166 return; 1166 return;
1167 } 1167 }
@@ -1175,19 +1175,19 @@ void LLTextureCache::purgeTextures(bool validate)
1175 (U8*)entries, 0, num_entries*sizeof(Entry)); 1175 (U8*)entries, 0, num_entries*sizeof(Entry));
1176 if (bytes_read != filesize) 1176 if (bytes_read != filesize)
1177 { 1177 {
1178 llwarns << "Bad cache file (2): " << mTexturesDirEntriesFileName << " Purging." << llendl; 1178 LL_WARNS("TextureCache") << "Bad cache file (2): " << mTexturesDirEntriesFileName << " Purging." << LL_ENDL;
1179 purgeAllTextures(false); 1179 purgeAllTextures(false);
1180 return; 1180 return;
1181 } 1181 }
1182 1182
1183 llinfos << "TEXTURE CACHE: Reading Entries..." << llendl; 1183 LL_DEBUGS("TextureCache") << "TEXTURE CACHE: Reading Entries..." << LL_ENDL;
1184 1184
1185 std::map<LLUUID, S32> entry_idx_map; 1185 std::map<LLUUID, S32> entry_idx_map;
1186 S64 total_size = 0; 1186 S64 total_size = 0;
1187 for (S32 idx=0; idx<num_entries; idx++) 1187 for (S32 idx=0; idx<num_entries; idx++)
1188 { 1188 {
1189 const LLUUID& id = entries[idx].mID; 1189 const LLUUID& id = entries[idx].mID;
1190// llinfos << "Entry: " << id << " Size: " << entries[i].mSize << " Time: " << entries[i].mTime << llendl; 1190 LL_DEBUGS("TextureCache") << "Entry: " << id << " Size: " << entries[idx].mSize << " Time: " << entries[idx].mTime << LL_ENDL;
1191 std::map<LLUUID, S32>::iterator iter = entry_idx_map.find(id); 1191 std::map<LLUUID, S32>::iterator iter = entry_idx_map.find(id);
1192 if (iter != entry_idx_map.end()) 1192 if (iter != entry_idx_map.end())
1193 { 1193 {
@@ -1206,7 +1206,7 @@ void LLTextureCache::purgeTextures(bool validate)
1206 validate_idx = gSavedSettings.getU32("CacheValidateCounter"); 1206 validate_idx = gSavedSettings.getU32("CacheValidateCounter");
1207 U32 next_idx = (++validate_idx) % 256; 1207 U32 next_idx = (++validate_idx) % 256;
1208 gSavedSettings.setU32("CacheValidateCounter", next_idx); 1208 gSavedSettings.setU32("CacheValidateCounter", next_idx);
1209 llinfos << "TEXTURE CACHE: Validating: " << validate_idx << llendl; 1209 LL_DEBUGS("TextureCache") << "TEXTURE CACHE: Validating: " << validate_idx << LL_ENDL;
1210 } 1210 }
1211 1211
1212 S64 min_cache_size = (sCacheMaxTexturesSize * 9) / 10; 1212 S64 min_cache_size = (sCacheMaxTexturesSize * 9) / 10;
@@ -1230,12 +1230,12 @@ void LLTextureCache::purgeTextures(bool validate)
1230 S32 uuididx = entries[idx].mID.mData[0]; 1230 S32 uuididx = entries[idx].mID.mData[0];
1231 if (uuididx == validate_idx) 1231 if (uuididx == validate_idx)
1232 { 1232 {
1233// llinfos << "Validating: " << filename << "Size: " << entries[idx].mSize << llendl; 1233 LL_DEBUGS("TextureCache") << "Validating: " << filename << "Size: " << entries[idx].mSize << LL_ENDL;
1234 S32 bodysize = ll_apr_file_size(filename, NULL); 1234 S32 bodysize = ll_apr_file_size(filename, NULL);
1235 if (bodysize != entries[idx].mSize) 1235 if (bodysize != entries[idx].mSize)
1236 { 1236 {
1237 llwarns << "TEXTURE CACHE BODY HAS BAD SIZE: " << bodysize << " != " << entries[idx].mSize 1237 LL_WARNS("TextureCache") << "TEXTURE CACHE BODY HAS BAD SIZE: " << bodysize << " != " << entries[idx].mSize
1238 << filename << llendl; 1238 << filename << LL_ENDL;
1239 purge_entry = true; 1239 purge_entry = true;
1240 } 1240 }
1241 } 1241 }
@@ -1243,7 +1243,7 @@ void LLTextureCache::purgeTextures(bool validate)
1243 if (purge_entry) 1243 if (purge_entry)
1244 { 1244 {
1245 purge_count++; 1245 purge_count++;
1246// llinfos << "PURGING: " << filename << llendl; 1246 LL_DEBUGS("TextureCache") << "PURGING: " << filename << LL_ENDL;
1247 ll_apr_file_remove(filename, NULL); 1247 ll_apr_file_remove(filename, NULL);
1248 total_size -= entries[idx].mSize; 1248 total_size -= entries[idx].mSize;
1249 entries[idx].mSize = 0; 1249 entries[idx].mSize = 0;
@@ -1259,7 +1259,7 @@ void LLTextureCache::purgeTextures(bool validate)
1259 } 1259 }
1260 num_entries = next_idx; 1260 num_entries = next_idx;
1261 1261
1262 llinfos << "TEXTURE CACHE: Writing Entries: " << num_entries << llendl; 1262 LL_DEBUGS("TextureCache") << "TEXTURE CACHE: Writing Entries: " << num_entries << LL_ENDL;
1263 1263
1264 ll_apr_file_remove(mTexturesDirEntriesFileName, NULL); 1264 ll_apr_file_remove(mTexturesDirEntriesFileName, NULL);
1265 ll_apr_file_write_ex(mTexturesDirEntriesFileName, NULL, 1265 ll_apr_file_write_ex(mTexturesDirEntriesFileName, NULL,
@@ -1276,7 +1276,7 @@ void LLTextureCache::purgeTextures(bool validate)
1276 1276
1277 delete[] entries; 1277 delete[] entries;
1278 1278
1279 llinfos << "TEXTURE CACHE:" 1279 LL_INFOS("TextureCache") << "TEXTURE CACHE:"
1280 << " PURGED: " << purge_count 1280 << " PURGED: " << purge_count
1281 << " ENTRIES: " << num_entries 1281 << " ENTRIES: " << num_entries
1282 << " CACHE SIZE: " << total_size / 1024*1024 << " MB" 1282 << " CACHE SIZE: " << total_size / 1024*1024 << " MB"
diff --git a/linden/indra/newview/lltexturectrl.cpp b/linden/indra/newview/lltexturectrl.cpp
index 2be75c7..9a02c5a 100644
--- a/linden/indra/newview/lltexturectrl.cpp
+++ b/linden/indra/newview/lltexturectrl.cpp
@@ -34,7 +34,7 @@
34 34
35#include "lltexturectrl.h" 35#include "lltexturectrl.h"
36 36
37#include "llglimmediate.h" 37#include "llrender.h"
38#include "llagent.h" 38#include "llagent.h"
39#include "llviewerimagelist.h" 39#include "llviewerimagelist.h"
40#include "llcheckboxctrl.h" 40#include "llcheckboxctrl.h"
diff --git a/linden/indra/newview/lltexturefetch.cpp b/linden/indra/newview/lltexturefetch.cpp
index 9399ed3..2e4283b 100644
--- a/linden/indra/newview/lltexturefetch.cpp
+++ b/linden/indra/newview/lltexturefetch.cpp
@@ -1341,13 +1341,13 @@ bool LLTextureFetch::createRequest(const LLString& filename, const LLUUID& id, c
1341 } 1341 }
1342 1342
1343 S32 desired_size; 1343 S32 desired_size;
1344 if ((desired_discard == 0) && worker && worker->mFileSize) 1344 if (desired_discard == 0)
1345 { 1345 {
1346 // if we want the entire image, and we know its size, then get it all 1346 // if we want the entire image, and we know its size, then get it all
1347 // (calcDataSizeJ2C() below makes assumptions about how the image 1347 // (calcDataSizeJ2C() below makes assumptions about how the image
1348 // was compressed - this code ensures that when we request the entire image, 1348 // was compressed - this code ensures that when we request the entire image,
1349 // we really do get it.) 1349 // we really do get it.)
1350 desired_size = worker->mFileSize; 1350 desired_size = MAX_IMAGE_DATA_SIZE;
1351 } 1351 }
1352 else if (w*h*c > 0) 1352 else if (w*h*c > 0)
1353 { 1353 {
@@ -1358,17 +1358,11 @@ bool LLTextureFetch::createRequest(const LLString& filename, const LLUUID& id, c
1358 } 1358 }
1359 else 1359 else
1360 { 1360 {
1361 if (desired_discard == 0) 1361 desired_size = FIRST_PACKET_SIZE;
1362 { 1362 desired_discard = MAX_DISCARD_LEVEL;
1363 // If we want all of the image, request the maximum possible data
1364 desired_size = MAX_IMAGE_DATA_SIZE;
1365 }
1366 else
1367 {
1368 desired_size = FIRST_PACKET_SIZE;
1369 desired_discard = MAX_DISCARD_LEVEL;
1370 }
1371 } 1363 }
1364
1365
1372 if (worker) 1366 if (worker)
1373 { 1367 {
1374 if (worker->wasAborted()) 1368 if (worker->wasAborted())
diff --git a/linden/indra/newview/lltextureview.cpp b/linden/indra/newview/lltextureview.cpp
index db2853e..a2b3d47 100644
--- a/linden/indra/newview/lltextureview.cpp
+++ b/linden/indra/newview/lltextureview.cpp
@@ -40,7 +40,7 @@
40#include "lllfsthread.h" 40#include "lllfsthread.h"
41#include "llui.h" 41#include "llui.h"
42#include "llimageworker.h" 42#include "llimageworker.h"
43#include "llglimmediate.h" 43#include "llrender.h"
44 44
45#include "llhoverview.h" 45#include "llhoverview.h"
46#include "llselectmgr.h" 46#include "llselectmgr.h"
diff --git a/linden/indra/newview/lltoolbar.cpp b/linden/indra/newview/lltoolbar.cpp
index 8d103ce..6612538 100644
--- a/linden/indra/newview/lltoolbar.cpp
+++ b/linden/indra/newview/lltoolbar.cpp
@@ -288,10 +288,15 @@ void LLToolBar::refresh()
288 288
289 // Clothing button updated inside LLFloaterClothing 289 // Clothing button updated inside LLFloaterClothing
290 290
291 childSetEnabled("fly_btn", gAgent.canFly() || gAgent.getFlying() ); 291 BOOL sitting = FALSE;
292 if (gAgent.getAvatarObject())
293 {
294 sitting = gAgent.getAvatarObject()->mIsSitting;
295 }
292 296
293 childSetEnabled("build_btn", LLViewerParcelMgr::getInstance()->agentCanBuild() ); 297 childSetEnabled("fly_btn", (gAgent.canFly() || gAgent.getFlying()) && !sitting );
294 298
299 childSetEnabled("build_btn", LLViewerParcelMgr::getInstance()->agentCanBuild() );
295 300
296 // Check to see if we're in build mode 301 // Check to see if we're in build mode
297 BOOL build_mode = LLToolMgr::getInstance()->inEdit(); 302 BOOL build_mode = LLToolMgr::getInstance()->inEdit();
diff --git a/linden/indra/newview/lltoolbrush.cpp b/linden/indra/newview/lltoolbrush.cpp
index 319a5fd..9958d50 100644
--- a/linden/indra/newview/lltoolbrush.cpp
+++ b/linden/indra/newview/lltoolbrush.cpp
@@ -35,7 +35,7 @@
35#include "lltoolselectland.h" 35#include "lltoolselectland.h"
36 36
37#include "llgl.h" 37#include "llgl.h"
38#include "llglimmediate.h" 38#include "llrender.h"
39 39
40#include "message.h" 40#include "message.h"
41 41
diff --git a/linden/indra/newview/lltooldraganddrop.cpp b/linden/indra/newview/lltooldraganddrop.cpp
index 67a2153..c492c7b 100644
--- a/linden/indra/newview/lltooldraganddrop.cpp
+++ b/linden/indra/newview/lltooldraganddrop.cpp
@@ -47,6 +47,7 @@
47#include "llhudmanager.h" 47#include "llhudmanager.h"
48#include "llinventorymodel.h" 48#include "llinventorymodel.h"
49#include "llinventoryview.h" 49#include "llinventoryview.h"
50#include "llmutelist.h"
50#include "llnotify.h" 51#include "llnotify.h"
51#include "llpreviewnotecard.h" 52#include "llpreviewnotecard.h"
52#include "llselectmgr.h" 53#include "llselectmgr.h"
@@ -1693,6 +1694,8 @@ void LLToolDragAndDrop::commitGiveInventoryItem(const LLUUID& to_agent,
1693 effectp->setDuration(LL_HUD_DUR_SHORT); 1694 effectp->setDuration(LL_HUD_DUR_SHORT);
1694 effectp->setColor(LLColor4U(gAgent.getEffectColor())); 1695 effectp->setColor(LLColor4U(gAgent.getEffectColor()));
1695 gFloaterTools->dirty(); 1696 gFloaterTools->dirty();
1697
1698 LLMuteList::getInstance()->autoRemove(to_agent, LLMuteList::AR_INVENTORY);
1696} 1699}
1697 1700
1698void LLToolDragAndDrop::giveInventoryCategory(const LLUUID& to_agent, 1701void LLToolDragAndDrop::giveInventoryCategory(const LLUUID& to_agent,
@@ -1895,6 +1898,8 @@ void LLToolDragAndDrop::commitGiveInventoryCategory(const LLUUID& to_agent,
1895 effectp->setDuration(LL_HUD_DUR_SHORT); 1898 effectp->setDuration(LL_HUD_DUR_SHORT);
1896 effectp->setColor(LLColor4U(gAgent.getEffectColor())); 1899 effectp->setColor(LLColor4U(gAgent.getEffectColor()));
1897 gFloaterTools->dirty(); 1900 gFloaterTools->dirty();
1901
1902 LLMuteList::getInstance()->autoRemove(to_agent, LLMuteList::AR_INVENTORY);
1898 } 1903 }
1899} 1904}
1900 1905
diff --git a/linden/indra/newview/lltoolfocus.cpp b/linden/indra/newview/lltoolfocus.cpp
index c526e6e..e5a3ed5 100644
--- a/linden/indra/newview/lltoolfocus.cpp
+++ b/linden/indra/newview/lltoolfocus.cpp
@@ -57,6 +57,7 @@
57#include "llmorphview.h" 57#include "llmorphview.h"
58 58
59// Globals 59// Globals
60BOOL gCameraBtnZoom = TRUE;
60BOOL gCameraBtnOrbit = FALSE; 61BOOL gCameraBtnOrbit = FALSE;
61BOOL gCameraBtnPan = FALSE; 62BOOL gCameraBtnPan = FALSE;
62 63
@@ -403,7 +404,7 @@ BOOL LLToolCamera::handleHover(S32 x, S32 y, MASK mask)
403 } 404 }
404 lldebugst(LLERR_USER_INPUT) << "hover handled by LLToolPan" << llendl; 405 lldebugst(LLERR_USER_INPUT) << "hover handled by LLToolPan" << llendl;
405 } 406 }
406 else 407 else if (gCameraBtnZoom)
407 { 408 {
408 // Zoom tool 409 // Zoom tool
409 if (hasMouseCapture()) 410 if (hasMouseCapture())
diff --git a/linden/indra/newview/lltoolfocus.h b/linden/indra/newview/lltoolfocus.h
index 3f5b04c..e50ea5e 100644
--- a/linden/indra/newview/lltoolfocus.h
+++ b/linden/indra/newview/lltoolfocus.h
@@ -77,5 +77,6 @@ protected:
77 77
78extern BOOL gCameraBtnOrbit; 78extern BOOL gCameraBtnOrbit;
79extern BOOL gCameraBtnPan; 79extern BOOL gCameraBtnPan;
80extern BOOL gCameraBtnZoom;
80 81
81#endif 82#endif
diff --git a/linden/indra/newview/lltoolmorph.cpp b/linden/indra/newview/lltoolmorph.cpp
index a18321a..2fbf4ae 100644
--- a/linden/indra/newview/lltoolmorph.cpp
+++ b/linden/indra/newview/lltoolmorph.cpp
@@ -33,7 +33,7 @@
33 33
34// File includes 34// File includes
35#include "lltoolmorph.h" 35#include "lltoolmorph.h"
36#include "llglimmediate.h" 36#include "llrender.h"
37 37
38// Library includes 38// Library includes
39#include "audioengine.h" 39#include "audioengine.h"
diff --git a/linden/indra/newview/lltoolselectrect.cpp b/linden/indra/newview/lltoolselectrect.cpp
index 11cdf4b..ceb0659 100644
--- a/linden/indra/newview/lltoolselectrect.cpp
+++ b/linden/indra/newview/lltoolselectrect.cpp
@@ -36,7 +36,7 @@
36 36
37// Library includes 37// Library includes
38#include "llgl.h" 38#include "llgl.h"
39#include "llglimmediate.h" 39#include "llrender.h"
40#include "lldarray.h" 40#include "lldarray.h"
41 41
42// Viewer includes 42// Viewer includes
diff --git a/linden/indra/newview/lltracker.cpp b/linden/indra/newview/lltracker.cpp
index 9e4bb09..b5854c8 100644
--- a/linden/indra/newview/lltracker.cpp
+++ b/linden/indra/newview/lltracker.cpp
@@ -36,7 +36,7 @@
36#include "lldarray.h" 36#include "lldarray.h"
37#include "llfontgl.h" 37#include "llfontgl.h"
38#include "llgl.h" 38#include "llgl.h"
39#include "llglimmediate.h" 39#include "llrender.h"
40#include "llinventory.h" 40#include "llinventory.h"
41#include "llmemory.h" 41#include "llmemory.h"
42#include "llstring.h" 42#include "llstring.h"
diff --git a/linden/indra/newview/lltrans.cpp b/linden/indra/newview/lltrans.cpp
new file mode 100644
index 0000000..a848250
--- /dev/null
+++ b/linden/indra/newview/lltrans.cpp
@@ -0,0 +1,103 @@
1/**
2 * @file lltrans.cpp
3 * @brief LLTrans implementation
4 *
5 * $LicenseInfo:firstyear=2000&license=viewergpl$
6 *
7 * Copyright (c) 2000-2008, Linden Research, Inc.
8 *
9 * Second Life Viewer Source Code
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
12 * ("GPL"), unless you have obtained a separate licensing agreement
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
15 * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
16 *
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
19 * in the file doc/FLOSS-exception.txt in this software distribution, or
20 * online at http://secondlifegrid.net/programs/open_source/licensing/flossexception
21 *
22 * By copying, modifying or distributing this software, you acknowledge
23 * that you have read and understood your obligations described above,
24 * and agree to abide by those obligations.
25 *
26 * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
27 * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
28 * COMPLETENESS OR PERFORMANCE.
29 * $/LicenseInfo$
30 */
31
32
33#include "llviewerprecompiledheaders.h"
34#include "lltrans.h"
35#include "llxmlnode.h"
36#include "lluictrlfactory.h"
37#include "llalertdialog.h"
38
39#include <map>
40
41LLTrans::template_map_t LLTrans::sStringTemplates;
42
43//static
44bool LLTrans::parseStrings(const LLString& xml_filename)
45{
46 LLXMLNodePtr root;
47 BOOL success = LLUICtrlFactory::getLayeredXMLNode(xml_filename, root);
48
49 if (!success || root.isNull() || !root->hasName( "strings" ))
50 {
51 llerrs << "Problem reading strings: " << xml_filename << llendl;
52 return false;
53 }
54
55 for (LLXMLNode* string = root->getFirstChild();
56 string != NULL; string = string->getNextSibling())
57 {
58 if (!string->hasName("string"))
59 {
60 continue;
61 }
62
63 LLString string_name;
64
65 if (! string->getAttributeString("name", string_name))
66 {
67 llwarns << "Unable to parse string with no name" << llendl;
68 continue;
69 }
70
71 LLTransTemplate xml_template(string_name, string->getTextContents());
72 sStringTemplates[xml_template.mName] = xml_template;
73 }
74
75 return true;
76}
77
78//static
79LLString LLTrans::getString(const LLString &xml_desc, const LLString::format_map_t& args)
80{
81 template_map_t::iterator iter = sStringTemplates.find(xml_desc);
82
83 if (iter != sStringTemplates.end())
84 {
85 LLString text = iter->second.mText;
86 LLString::format(text, args);
87
88 return text;
89 }
90 else
91 {
92 LLString::format_map_t args;
93 args["[STRING_NAME]"] = xml_desc;
94 llwarns << "Missing String: [" << xml_desc << "]" << llendl;
95 LLAlertDialog* dialogp = LLAlertDialog::showXml("MissingString", args);
96 if (dialogp == NULL)
97 {
98 llerrs << "Bad or missing alerts.xml!" << llendl;
99 }
100 return "";
101 }
102}
103
diff --git a/linden/indra/newview/lltrans.h b/linden/indra/newview/lltrans.h
new file mode 100644
index 0000000..eb159f2
--- /dev/null
+++ b/linden/indra/newview/lltrans.h
@@ -0,0 +1,92 @@
1/**
2 * @file lltrans.h
3 * @brief LLTrans definition
4 *
5 * $LicenseInfo:firstyear=2000&license=viewergpl$
6 *
7 * Copyright (c) 2000-2008, Linden Research, Inc.
8 *
9 * Second Life Viewer Source Code
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
12 * ("GPL"), unless you have obtained a separate licensing agreement
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
15 * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
16 *
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
19 * in the file doc/FLOSS-exception.txt in this software distribution, or
20 * online at http://secondlifegrid.net/programs/open_source/licensing/flossexception
21 *
22 * By copying, modifying or distributing this software, you acknowledge
23 * that you have read and understood your obligations described above,
24 * and agree to abide by those obligations.
25 *
26 * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
27 * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
28 * COMPLETENESS OR PERFORMANCE.
29 * $/LicenseInfo$
30 */
31
32#ifndef LL_TRANS_H
33#define LL_TRANS_H
34
35#include <map>
36
37/**
38 * @brief String template loaded from strings.xml
39 */
40class LLTransTemplate
41{
42public:
43 LLTransTemplate(const LLString& name = "", const LLString& text = "") : mName(name), mText(text) {}
44
45 LLString mName;
46 LLString mText;
47};
48
49/**
50 * @brief Localized strings class
51 * This class is used to retrieve translations of strings used to build larger ones, as well as
52 * strings with a general usage that don't belong to any specific floater. For example,
53 * "Owner:", "Retrieving..." used in the place of a not yet known name, etc.
54 */
55class LLTrans
56{
57public:
58 LLTrans();
59
60 /**
61 * @brief Parses the xml file that holds the strings. Used once on startup
62 * @param xml_filename Filename to parse
63 * @returns true if the file was parsed successfully, true if something went wrong
64 */
65 static bool parseStrings(const LLString& xml_filename);
66
67 /**
68 * @brief Returns a translated string
69 * @param xml_desc String's description
70 * @param args A list of substrings to replace in the string
71 * @returns Translated string
72 */
73 static LLString getString(const LLString &xml_desc, const LLString::format_map_t& args);
74
75 /**
76 * @brief Returns a translated string
77 * @param xml_desc String's description
78 * @returns Translated string
79 */
80 static LLString getString(const LLString &xml_desc)
81 {
82 LLString::format_map_t empty;
83 return getString(xml_desc, empty);
84 }
85
86
87private:
88 typedef std::map<LLString, LLTransTemplate > template_map_t;
89 static template_map_t sStringTemplates;
90};
91
92#endif
diff --git a/linden/indra/newview/lluserauth.cpp b/linden/indra/newview/lluserauth.cpp
index 9e040d2..6c8801a 100644
--- a/linden/indra/newview/lluserauth.cpp
+++ b/linden/indra/newview/lluserauth.cpp
@@ -103,14 +103,15 @@ void LLUserAuth::authenticate(
103 const std::string& hashed_mac, 103 const std::string& hashed_mac,
104 const std::string& hashed_volume_serial) 104 const std::string& hashed_volume_serial)
105{ 105{
106 llinfos << "Authenticating: " << firstname << " " << lastname << ", " 106 LL_INFOS2("AppInit", "Authentication") << "Authenticating: " << firstname << " " << lastname << ", "
107 << /*dpasswd.c_str() <<*/ llendl; 107 << /*dpasswd.c_str() <<*/ LL_ENDL;
108 std::ostringstream option_str; 108 std::ostringstream option_str;
109 option_str << "Options: "; 109 option_str << "Options: ";
110 std::ostream_iterator<const char*> appender(option_str, ", "); 110 std::ostream_iterator<const char*> appender(option_str, ", ");
111 std::copy(requested_options.begin(), requested_options.end(), appender); 111 std::copy(requested_options.begin(), requested_options.end(), appender);
112 option_str << "END"; 112 option_str << "END";
113 llinfos << option_str.str().c_str() << llendl; 113
114 LL_INFOS2("AppInit", "Authentication") << option_str.str().c_str() << LL_ENDL;
114 115
115 mAuthResponse = E_NO_RESPONSE_YET; 116 mAuthResponse = E_NO_RESPONSE_YET;
116 //mDownloadTimer.reset(); 117 //mDownloadTimer.reset();
@@ -163,7 +164,7 @@ void LLUserAuth::authenticate(
163 164
164 XMLRPC_RequestFree(request, 1); 165 XMLRPC_RequestFree(request, 1);
165 166
166 llinfos << "LLUserAuth::authenticate: uri=" << auth_uri << llendl; 167 LL_INFOS2("AppInit", "Authentication") << "LLUserAuth::authenticate: uri=" << auth_uri << LL_ENDL;
167} 168}
168 169
169 170
@@ -188,14 +189,15 @@ void LLUserAuth::authenticate(
188{ 189{
189 std::string dpasswd("$1$"); 190 std::string dpasswd("$1$");
190 dpasswd.append(passwd); 191 dpasswd.append(passwd);
191 llinfos << "Authenticating: " << firstname << " " << lastname << ", " 192 LL_INFOS2("AppInit", "Authentication") << "Authenticating: " << firstname << " " << lastname << ", "
192 << /*dpasswd.c_str() <<*/ llendl; 193 << /*dpasswd.c_str() <<*/ LL_ENDL;
193 std::ostringstream option_str; 194 std::ostringstream option_str;
194 option_str << "Options: "; 195 option_str << "Options: ";
195 std::ostream_iterator<const char*> appender(option_str, ", "); 196 std::ostream_iterator<const char*> appender(option_str, ", ");
196 std::copy(requested_options.begin(), requested_options.end(), appender); 197 std::copy(requested_options.begin(), requested_options.end(), appender);
197 option_str << "END"; 198 option_str << "END";
198 llinfos << option_str.str().c_str() << llendl; 199
200 LL_INFOS2("AppInit", "Authentication") << option_str.str().c_str() << LL_ENDL;
199 201
200 mAuthResponse = E_NO_RESPONSE_YET; 202 mAuthResponse = E_NO_RESPONSE_YET;
201 //mDownloadTimer.reset(); 203 //mDownloadTimer.reset();
@@ -248,7 +250,7 @@ void LLUserAuth::authenticate(
248 250
249 XMLRPC_RequestFree(request, 1); 251 XMLRPC_RequestFree(request, 1);
250 252
251 llinfos << "LLUserAuth::authenticate: uri=" << auth_uri << llendl; 253 LL_INFOS2("AppInit", "Authentication") << "LLUserAuth::authenticate: uri=" << auth_uri << LL_ENDL;
252} 254}
253 255
254 256
@@ -300,7 +302,7 @@ LLUserAuth::UserAuthcode LLUserAuth::authResponse()
300 break; 302 break;
301 } 303 }
302 304
303 llinfos << "Processed response: " << result << llendl; 305 LL_INFOS2("AppInit", "Authentication") << "Processed response: " << result << LL_ENDL;
304 306
305 delete mTransaction; 307 delete mTransaction;
306 mTransaction = NULL; 308 mTransaction = NULL;
diff --git a/linden/indra/newview/llviewerassetstorage.cpp b/linden/indra/newview/llviewerassetstorage.cpp
index d9d497a..ac4003b 100644
--- a/linden/indra/newview/llviewerassetstorage.cpp
+++ b/linden/indra/newview/llviewerassetstorage.cpp
@@ -202,7 +202,7 @@ if(!filename)
202 llinfos << "ASSET_ID: " << asset_id << llendl; 202 llinfos << "ASSET_ID: " << asset_id << llendl;
203 203
204 S32 size = 0; 204 S32 size = 0;
205 FILE* fp = LLFile::fopen(filename, "rb"); 205 LLFILE* fp = LLFile::fopen(filename, "rb");
206 if (fp) 206 if (fp)
207 { 207 {
208 fseek(fp, 0, SEEK_END); 208 fseek(fp, 0, SEEK_END);
diff --git a/linden/indra/newview/llviewercontrol.cpp b/linden/indra/newview/llviewercontrol.cpp
index 203f9c7..146d738 100644
--- a/linden/indra/newview/llviewercontrol.cpp
+++ b/linden/indra/newview/llviewercontrol.cpp
@@ -69,7 +69,7 @@
69#include "llappviewer.h" 69#include "llappviewer.h"
70#include "llvosurfacepatch.h" 70#include "llvosurfacepatch.h"
71#include "llvowlsky.h" 71#include "llvowlsky.h"
72#include "llglimmediate.h" 72#include "llrender.h"
73 73
74#ifdef TOGGLE_HACKED_GODLIKE_VIEWER 74#ifdef TOGGLE_HACKED_GODLIKE_VIEWER
75BOOL gHackGodmode = FALSE; 75BOOL gHackGodmode = FALSE;
@@ -86,6 +86,7 @@ LLString gLastRunVersion;
86LLString gCurrentVersion; 86LLString gCurrentVersion;
87 87
88extern BOOL gResizeScreenTexture; 88extern BOOL gResizeScreenTexture;
89extern BOOL gDebugGL;
89 90
90//////////////////////////////////////////////////////////////////////////// 91////////////////////////////////////////////////////////////////////////////
91// Listeners 92// Listeners
@@ -357,9 +358,15 @@ static bool handleRenderUseImpostorsChanged(const LLSD& newvalue)
357 return true; 358 return true;
358} 359}
359 360
360static bool handleRenderUseCleverUIChanged(const LLSD& newvalue) 361static bool handleRenderDebugGLChanged(const LLSD& newvalue)
361{ 362{
362 gGL.setClever(newvalue.asBoolean()); 363 gDebugGL = newvalue.asBoolean();
364 return true;
365}
366
367static bool handleRenderDebugPipelineChanged(const LLSD& newvalue)
368{
369 gDebugPipeline = newvalue.asBoolean();
363 return true; 370 return true;
364} 371}
365 372
@@ -426,6 +433,7 @@ bool handleVoiceClientPrefsChanged(const LLSD& newvalue)
426 gVoiceClient->setCaptureDevice(inputDevice); 433 gVoiceClient->setCaptureDevice(inputDevice);
427 std::string outputDevice = gSavedSettings.getString("VoiceOutputAudioDevice"); 434 std::string outputDevice = gSavedSettings.getString("VoiceOutputAudioDevice");
428 gVoiceClient->setRenderDevice(outputDevice); 435 gVoiceClient->setRenderDevice(outputDevice);
436 gVoiceClient->setLipSyncEnabled(gSavedSettings.getBOOL("LipSyncEnabled"));
429 } 437 }
430 return true; 438 return true;
431} 439}
@@ -463,7 +471,8 @@ void settings_setup_listeners()
463 gSavedSettings.getControl("RenderMaxVBOSize")->getSignal()->connect(boost::bind(&handleResetVertexBuffersChanged, _1)); 471 gSavedSettings.getControl("RenderMaxVBOSize")->getSignal()->connect(boost::bind(&handleResetVertexBuffersChanged, _1));
464 gSavedSettings.getControl("RenderUseFBO")->getSignal()->connect(boost::bind(&handleRenderUseFBOChanged, _1)); 472 gSavedSettings.getControl("RenderUseFBO")->getSignal()->connect(boost::bind(&handleRenderUseFBOChanged, _1));
465 gSavedSettings.getControl("RenderUseImpostors")->getSignal()->connect(boost::bind(&handleRenderUseImpostorsChanged, _1)); 473 gSavedSettings.getControl("RenderUseImpostors")->getSignal()->connect(boost::bind(&handleRenderUseImpostorsChanged, _1));
466 gSavedSettings.getControl("RenderUseCleverUI")->getSignal()->connect(boost::bind(&handleRenderUseCleverUIChanged, _1)); 474 gSavedSettings.getControl("RenderDebugGL")->getSignal()->connect(boost::bind(&handleRenderDebugGLChanged, _1));
475 gSavedSettings.getControl("RenderDebugPipeline")->getSignal()->connect(boost::bind(&handleRenderDebugPipelineChanged, _1));
467 gSavedSettings.getControl("RenderResolutionDivisor")->getSignal()->connect(boost::bind(&handleRenderResolutionDivisorChanged, _1)); 476 gSavedSettings.getControl("RenderResolutionDivisor")->getSignal()->connect(boost::bind(&handleRenderResolutionDivisorChanged, _1));
468 gSavedSettings.getControl("RenderDeferred")->getSignal()->connect(boost::bind(&handleSetShaderChanged, _1)); 477 gSavedSettings.getControl("RenderDeferred")->getSignal()->connect(boost::bind(&handleSetShaderChanged, _1));
469 gSavedSettings.getControl("AvatarCompositeLimit")->getSignal()->connect(boost::bind(&handleCompositeLimitChanged, _1)); 478 gSavedSettings.getControl("AvatarCompositeLimit")->getSignal()->connect(boost::bind(&handleCompositeLimitChanged, _1));
@@ -555,5 +564,6 @@ void settings_setup_listeners()
555 gSavedSettings.getControl("VivoxDebugServerName")->getSignal()->connect(boost::bind(&handleVoiceClientPrefsChanged, _1)); 564 gSavedSettings.getControl("VivoxDebugServerName")->getSignal()->connect(boost::bind(&handleVoiceClientPrefsChanged, _1));
556 gSavedSettings.getControl("VoiceInputAudioDevice")->getSignal()->connect(boost::bind(&handleVoiceClientPrefsChanged, _1)); 565 gSavedSettings.getControl("VoiceInputAudioDevice")->getSignal()->connect(boost::bind(&handleVoiceClientPrefsChanged, _1));
557 gSavedSettings.getControl("VoiceOutputAudioDevice")->getSignal()->connect(boost::bind(&handleVoiceClientPrefsChanged, _1)); 566 gSavedSettings.getControl("VoiceOutputAudioDevice")->getSignal()->connect(boost::bind(&handleVoiceClientPrefsChanged, _1));
567 gSavedSettings.getControl("LipSyncEnabled")->getSignal()->connect(boost::bind(&handleVoiceClientPrefsChanged, _1));
558} 568}
559 569
diff --git a/linden/indra/newview/llviewerdisplay.cpp b/linden/indra/newview/llviewerdisplay.cpp
index cdffe33..47c9c32 100644
--- a/linden/indra/newview/llviewerdisplay.cpp
+++ b/linden/indra/newview/llviewerdisplay.cpp
@@ -34,7 +34,7 @@
34#include "llviewerdisplay.h" 34#include "llviewerdisplay.h"
35 35
36#include "llgl.h" 36#include "llgl.h"
37#include "llglimmediate.h" 37#include "llrender.h"
38#include "llglheaders.h" 38#include "llglheaders.h"
39#include "llagent.h" 39#include "llagent.h"
40#include "llviewercontrol.h" 40#include "llviewercontrol.h"
@@ -99,6 +99,9 @@ BOOL gDisplaySwapBuffers = FALSE;
99BOOL gResizeScreenTexture = FALSE; 99BOOL gResizeScreenTexture = FALSE;
100BOOL gSnapshot = FALSE; 100BOOL gSnapshot = FALSE;
101 101
102U32 gRecentFrameCount = 0; // number of 'recent' frames
103LLFrameTimer gRecentTime;
104
102// Rendering stuff 105// Rendering stuff
103void pre_show_depth_buffer(); 106void pre_show_depth_buffer();
104void post_show_depth_buffer(); 107void post_show_depth_buffer();
@@ -125,27 +128,24 @@ void display_startup()
125 128
126 // Required for HTML update in login screen 129 // Required for HTML update in login screen
127 static S32 frame_count = 0; 130 static S32 frame_count = 0;
128#ifndef LL_RELEASE_FOR_DOWNLOAD 131
129 LLGLState::checkStates(); 132 LLGLState::checkStates();
130 LLGLState::checkTextureChannels(); 133 LLGLState::checkTextureChannels();
131#endif
132 134
133 if (frame_count++ > 1) // make sure we have rendered a frame first 135 if (frame_count++ > 1) // make sure we have rendered a frame first
134 { 136 {
135 LLDynamicTexture::updateAllInstances(); 137 LLDynamicTexture::updateAllInstances();
136 } 138 }
137 139
138#ifndef LL_RELEASE_FOR_DOWNLOAD
139 LLGLState::checkStates(); 140 LLGLState::checkStates();
140 LLGLState::checkTextureChannels(); 141 LLGLState::checkTextureChannels();
141#endif
142 142
143 glClear(GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT | GL_STENCIL_BUFFER_BIT); 143 glClear(GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);
144 LLGLSUIDefault gls_ui; 144 LLGLSUIDefault gls_ui;
145 gPipeline.disableLights(); 145 gPipeline.disableLights();
146 146
147 gViewerWindow->setup2DRender(); 147 gViewerWindow->setup2DRender();
148 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); 148 gGL.getTexUnit(0)->setTextureBlendType(LLTexUnit::TB_MULT);
149 149
150 gGL.color4f(1,1,1,1); 150 gGL.color4f(1,1,1,1);
151 gViewerWindow->draw(); 151 gViewerWindow->draw();
@@ -153,10 +153,8 @@ void display_startup()
153 153
154 LLVertexBuffer::unbind(); 154 LLVertexBuffer::unbind();
155 155
156#ifndef LL_RELEASE_FOR_DOWNLOAD
157 LLGLState::checkStates(); 156 LLGLState::checkStates();
158 LLGLState::checkTextureChannels(); 157 LLGLState::checkTextureChannels();
159#endif
160 158
161 gViewerWindow->mWindow->swapBuffers(); 159 gViewerWindow->mWindow->swapBuffers();
162 glClear(GL_DEPTH_BUFFER_BIT); 160 glClear(GL_DEPTH_BUFFER_BIT);
@@ -186,6 +184,18 @@ void display_update_camera()
186 LLWorld::getInstance()->setLandFarClip(final_far); 184 LLWorld::getInstance()->setLandFarClip(final_far);
187} 185}
188 186
187// Write some stats to llinfos
188void display_stats()
189{
190 F32 log_freq = gSavedSettings.getF32("FPSLogFrequency");
191 if (log_freq > 0.f && gRecentTime.getElapsedTimeF32() >= log_freq)
192 {
193 F32 fps = gRecentFrameCount / log_freq;
194 llinfos << llformat("FPS: %.02f", fps) << llendl;
195 gRecentFrameCount = 0;
196 gRecentTime.reset();
197 }
198}
189 199
190// Paint the display! 200// Paint the display!
191void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot) 201void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot)
@@ -204,10 +214,8 @@ void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot)
204 214
205 LLVertexBuffer::unbind(); 215 LLVertexBuffer::unbind();
206 216
207#ifndef LL_RELEASE_FOR_DOWNLOAD
208 LLGLState::checkStates(); 217 LLGLState::checkStates();
209 LLGLState::checkTextureChannels(); 218 LLGLState::checkTextureChannels();
210#endif
211 219
212 gPipeline.disableLights(); 220 gPipeline.disableLights();
213 221
@@ -232,10 +240,8 @@ void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot)
232 gViewerWindow->performPick(); 240 gViewerWindow->performPick();
233 241
234 242
235#ifndef LL_RELEASE_FOR_DOWNLOAD
236 LLGLState::checkStates(); 243 LLGLState::checkStates();
237 LLGLState::checkTextureChannels(); 244 LLGLState::checkTextureChannels();
238#endif
239 245
240 ////////////////////////////////////////////////////////// 246 //////////////////////////////////////////////////////////
241 // 247 //
@@ -286,6 +292,7 @@ void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot)
286 292
287 gPipeline.mBackfaceCull = TRUE; 293 gPipeline.mBackfaceCull = TRUE;
288 gFrameCount++; 294 gFrameCount++;
295 gRecentFrameCount++;
289 if (gFocusMgr.getAppHasFocus()) 296 if (gFocusMgr.getAppHasFocus())
290 { 297 {
291 gForegroundFrameCount++; 298 gForegroundFrameCount++;
@@ -474,7 +481,7 @@ void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot)
474 LLFastTimer t(LLFastTimer::FTM_UPDATE_TEXTURES); 481 LLFastTimer t(LLFastTimer::FTM_UPDATE_TEXTURES);
475 if (LLDynamicTexture::updateAllInstances()) 482 if (LLDynamicTexture::updateAllInstances())
476 { 483 {
477 glColorMask(GL_TRUE,GL_TRUE,GL_TRUE,GL_TRUE); 484 gGL.setColorMask(true, true);
478 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 485 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
479 } 486 }
480 } 487 }
@@ -559,7 +566,7 @@ void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot)
559 gPipeline.resizeScreenTexture(); 566 gPipeline.resizeScreenTexture();
560 } 567 }
561 568
562 glColorMask(GL_TRUE,GL_TRUE,GL_TRUE,GL_TRUE); 569 gGL.setColorMask(true, true);
563 glClearColor(0,0,0,0); 570 glClearColor(0,0,0,0);
564 571
565 if (!for_snapshot) 572 if (!for_snapshot)
@@ -690,20 +697,20 @@ void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot)
690 697
691 if (to_texture) 698 if (to_texture)
692 { 699 {
693 glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); 700 gGL.setColorMask(true, true);
694 gPipeline.mScreen.bindTarget(); 701 gPipeline.mScreen.bindTarget();
695 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT); 702 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);
696 glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_FALSE); 703 gGL.setColorMask(true, false);
697 } 704 }
698 705
699 if (!(LLAppViewer::instance()->logoutRequestSent() && LLAppViewer::instance()->hasSavedFinalSnapshot()) 706 if (!(LLAppViewer::instance()->logoutRequestSent() && LLAppViewer::instance()->hasSavedFinalSnapshot())
700 && !gRestoreGL) 707 && !gRestoreGL)
701 { 708 {
702 glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_FALSE); 709 gGL.setColorMask(true, false);
703 LLPipeline::sUnderWaterRender = LLViewerCamera::getInstance()->cameraUnderWater() ? TRUE : FALSE; 710 LLPipeline::sUnderWaterRender = LLViewerCamera::getInstance()->cameraUnderWater() ? TRUE : FALSE;
704 gPipeline.renderGeom(*LLViewerCamera::getInstance(), TRUE); 711 gPipeline.renderGeom(*LLViewerCamera::getInstance(), TRUE);
705 LLPipeline::sUnderWaterRender = FALSE; 712 LLPipeline::sUnderWaterRender = FALSE;
706 glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); 713 gGL.setColorMask(true, true);
707 714
708 //store this frame's modelview matrix for use 715 //store this frame's modelview matrix for use
709 //when rendering next frame's occlusion queries 716 //when rendering next frame's occlusion queries
@@ -741,6 +748,8 @@ void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot)
741 send_agent_resume(); 748 send_agent_resume();
742 LLPipeline::sRenderFrameTest = FALSE; 749 LLPipeline::sRenderFrameTest = FALSE;
743 } 750 }
751
752 display_stats();
744} 753}
745 754
746void render_hud_attachments() 755void render_hud_attachments()
@@ -880,9 +889,7 @@ BOOL setup_hud_matrices(BOOL for_select)
880 889
881void render_ui_and_swap() 890void render_ui_and_swap()
882{ 891{
883#ifndef LL_RELEASE_FOR_DOWNLOAD
884 LLGLState::checkStates(); 892 LLGLState::checkStates();
885#endif
886 893
887 glPushMatrix(); 894 glPushMatrix();
888 glLoadMatrixd(gGLLastModelView); 895 glLoadMatrixd(gGLLastModelView);
@@ -918,15 +925,11 @@ void render_ui_and_swap()
918 if (!gDisconnected) 925 if (!gDisconnected)
919 { 926 {
920 render_ui_3d(); 927 render_ui_3d();
921#ifndef LL_RELEASE_FOR_DOWNLOAD
922 LLGLState::checkStates(); 928 LLGLState::checkStates();
923#endif
924 } 929 }
925 930
926 render_ui_2d(); 931 render_ui_2d();
927#ifndef LL_RELEASE_FOR_DOWNLOAD
928 LLGLState::checkStates(); 932 LLGLState::checkStates();
929#endif
930 } 933 }
931 gGL.flush(); 934 gGL.flush();
932 935
@@ -1088,7 +1091,7 @@ void render_ui_2d()
1088 } 1091 }
1089 1092
1090 stop_glerror(); 1093 stop_glerror();
1091 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); 1094 gGL.getTexUnit(0)->setTextureBlendType(LLTexUnit::TB_MULT);
1092 1095
1093 // render outline for HUD 1096 // render outline for HUD
1094 if (gAgent.getAvatarObject() && gAgent.getAvatarObject()->mHUDCurZoom < 0.98f) 1097 if (gAgent.getAvatarObject() && gAgent.getAvatarObject()->mHUDCurZoom < 0.98f)
@@ -1115,7 +1118,6 @@ void render_ui_2d()
1115 LLFontGL::sCurOrigin.set(0, 0); 1118 LLFontGL::sCurOrigin.set(0, 0);
1116} 1119}
1117 1120
1118
1119void render_disconnected_background() 1121void render_disconnected_background()
1120{ 1122{
1121 gGL.color4f(1,1,1,1); 1123 gGL.color4f(1,1,1,1);
diff --git a/linden/indra/newview/llviewerimagelist.cpp b/linden/indra/newview/llviewerimagelist.cpp
index 88759af..a824b29 100644
--- a/linden/indra/newview/llviewerimagelist.cpp
+++ b/linden/indra/newview/llviewerimagelist.cpp
@@ -114,7 +114,7 @@ void LLViewerImageList::init()
114 114
115void LLViewerImageList::doPreloadImages() 115void LLViewerImageList::doPreloadImages()
116{ 116{
117 llinfos << "Preloading images..." << llendl; 117 LL_DEBUGS("ViewerImages") << "Preloading images..." << LL_ENDL;
118 118
119 // Set the "missing asset" image 119 // Set the "missing asset" image
120 LLViewerImage::sMissingAssetImagep = getImageFromFile("missing_asset.tga"); 120 LLViewerImage::sMissingAssetImagep = getImageFromFile("missing_asset.tga");
@@ -772,10 +772,10 @@ void LLViewerImageList::decodeAllImages(F32 max_time)
772 max_time = llmax(max_time, .001f); 772 max_time = llmax(max_time, .001f);
773 F32 create_time = updateImagesCreateTextures(max_time); 773 F32 create_time = updateImagesCreateTextures(max_time);
774 774
775 llinfos << "decodeAllImages() took " << timer.getElapsedTimeF32() << " seconds. " 775 LL_DEBUGS("ViewerImages") << "decodeAllImages() took " << timer.getElapsedTimeF32() << " seconds. "
776 << " fetch_pending " << fetch_pending 776 << " fetch_pending " << fetch_pending
777 << " create_time " << create_time 777 << " create_time " << create_time
778 << llendl; 778 << LL_ENDL;
779} 779}
780 780
781 781
diff --git a/linden/indra/newview/llviewerinventory.cpp b/linden/indra/newview/llviewerinventory.cpp
index db005c7..d7c1778 100644
--- a/linden/indra/newview/llviewerinventory.cpp
+++ b/linden/indra/newview/llviewerinventory.cpp
@@ -254,7 +254,7 @@ void LLViewerInventoryItem::packMessage(LLMessageSystem* msg) const
254 msg->addU32Fast(_PREHASH_CRC, crc); 254 msg->addU32Fast(_PREHASH_CRC, crc);
255} 255}
256// virtual 256// virtual
257BOOL LLViewerInventoryItem::importFile(FILE* fp) 257BOOL LLViewerInventoryItem::importFile(LLFILE* fp)
258{ 258{
259 BOOL rv = LLInventoryItem::importFile(fp); 259 BOOL rv = LLInventoryItem::importFile(fp);
260 mIsComplete = TRUE; 260 mIsComplete = TRUE;
@@ -269,7 +269,7 @@ BOOL LLViewerInventoryItem::importLegacyStream(std::istream& input_stream)
269 return rv; 269 return rv;
270} 270}
271 271
272bool LLViewerInventoryItem::importFileLocal(FILE* fp) 272bool LLViewerInventoryItem::importFileLocal(LLFILE* fp)
273{ 273{
274 // TODO: convert all functions that return BOOL to return bool 274 // TODO: convert all functions that return BOOL to return bool
275 bool rv = (LLInventoryItem::importFile(fp) ? true : false); 275 bool rv = (LLInventoryItem::importFile(fp) ? true : false);
@@ -277,7 +277,7 @@ bool LLViewerInventoryItem::importFileLocal(FILE* fp)
277 return rv; 277 return rv;
278} 278}
279 279
280bool LLViewerInventoryItem::exportFileLocal(FILE* fp) const 280bool LLViewerInventoryItem::exportFileLocal(LLFILE* fp) const
281{ 281{
282 char uuid_str[UUID_STR_LENGTH]; /* Flawfinder: ignore */ 282 char uuid_str[UUID_STR_LENGTH]; /* Flawfinder: ignore */
283 fprintf(fp, "\tinv_item\t0\n\t{\n"); 283 fprintf(fp, "\tinv_item\t0\n\t{\n");
@@ -469,7 +469,7 @@ bool LLViewerInventoryCategory::fetchDescendents()
469 return false; 469 return false;
470} 470}
471 471
472bool LLViewerInventoryCategory::importFileLocal(FILE* fp) 472bool LLViewerInventoryCategory::importFileLocal(LLFILE* fp)
473{ 473{
474 // *NOTE: This buffer size is hard coded into scanf() below. 474 // *NOTE: This buffer size is hard coded into scanf() below.
475 char buffer[MAX_STRING]; /* Flawfinder: ignore */ 475 char buffer[MAX_STRING]; /* Flawfinder: ignore */
@@ -538,7 +538,7 @@ bool LLViewerInventoryCategory::importFileLocal(FILE* fp)
538 return true; 538 return true;
539} 539}
540 540
541bool LLViewerInventoryCategory::exportFileLocal(FILE* fp) const 541bool LLViewerInventoryCategory::exportFileLocal(LLFILE* fp) const
542{ 542{
543 char uuid_str[UUID_STR_LENGTH]; /* Flawfinder: ignore */ 543 char uuid_str[UUID_STR_LENGTH]; /* Flawfinder: ignore */
544 fprintf(fp, "\tinv_category\t0\n\t{\n"); 544 fprintf(fp, "\tinv_category\t0\n\t{\n");
diff --git a/linden/indra/newview/llviewerinventory.h b/linden/indra/newview/llviewerinventory.h
index 05dc19a..e80a042 100644
--- a/linden/indra/newview/llviewerinventory.h
+++ b/linden/indra/newview/llviewerinventory.h
@@ -100,13 +100,13 @@ public:
100 //virtual void packMessage(LLMessageSystem* msg) const; 100 //virtual void packMessage(LLMessageSystem* msg) const;
101 virtual BOOL unpackMessage(LLMessageSystem* msg, const char* block, S32 block_num = 0); 101 virtual BOOL unpackMessage(LLMessageSystem* msg, const char* block, S32 block_num = 0);
102 virtual BOOL unpackMessage(LLSD item); 102 virtual BOOL unpackMessage(LLSD item);
103 virtual BOOL importFile(FILE* fp); 103 virtual BOOL importFile(LLFILE* fp);
104 virtual BOOL importLegacyStream(std::istream& input_stream); 104 virtual BOOL importLegacyStream(std::istream& input_stream);
105 105
106 // file handling on the viewer. These are not meant for anything 106 // file handling on the viewer. These are not meant for anything
107 // other than cacheing. 107 // other than cacheing.
108 bool exportFileLocal(FILE* fp) const; 108 bool exportFileLocal(LLFILE* fp) const;
109 bool importFileLocal(FILE* fp); 109 bool importFileLocal(LLFILE* fp);
110 110
111 // new methods 111 // new methods
112 BOOL isComplete() const { return mIsComplete; } 112 BOOL isComplete() const { return mIsComplete; }
@@ -182,8 +182,8 @@ public:
182 182
183 // file handling on the viewer. These are not meant for anything 183 // file handling on the viewer. These are not meant for anything
184 // other than cacheing. 184 // other than cacheing.
185 bool exportFileLocal(FILE* fp) const; 185 bool exportFileLocal(LLFILE* fp) const;
186 bool importFileLocal(FILE* fp); 186 bool importFileLocal(LLFILE* fp);
187 187
188protected: 188protected:
189 LLUUID mOwnerID; 189 LLUUID mOwnerID;
diff --git a/linden/indra/newview/llviewerjoint.cpp b/linden/indra/newview/llviewerjoint.cpp
index 71f9211..1be6e66 100644
--- a/linden/indra/newview/llviewerjoint.cpp
+++ b/linden/indra/newview/llviewerjoint.cpp
@@ -37,7 +37,7 @@
37#include "llviewerjoint.h" 37#include "llviewerjoint.h"
38 38
39#include "llgl.h" 39#include "llgl.h"
40#include "llglimmediate.h" 40#include "llrender.h"
41#include "llmath.h" 41#include "llmath.h"
42#include "llglheaders.h" 42#include "llglheaders.h"
43#include "llrendersphere.h" 43#include "llrendersphere.h"
@@ -272,12 +272,12 @@ U32 LLViewerJoint::render( F32 pixelArea, BOOL first_pass )
272 triangle_count += drawShape( pixelArea, first_pass); 272 triangle_count += drawShape( pixelArea, first_pass);
273 } 273 }
274 // second pass writes to z buffer only 274 // second pass writes to z buffer only
275 glColorMask(FALSE, FALSE, FALSE, FALSE); 275 gGL.setColorMask(false, false);
276 { 276 {
277 triangle_count += drawShape( pixelArea, FALSE ); 277 triangle_count += drawShape( pixelArea, FALSE );
278 } 278 }
279 // third past respects z buffer and writes color 279 // third past respects z buffer and writes color
280 glColorMask(TRUE, TRUE, TRUE, FALSE); 280 gGL.setColorMask(true, false);
281 { 281 {
282 LLGLDepthTest gls_depth(GL_TRUE, GL_FALSE); 282 LLGLDepthTest gls_depth(GL_TRUE, GL_FALSE);
283 triangle_count += drawShape( pixelArea, FALSE ); 283 triangle_count += drawShape( pixelArea, FALSE );
diff --git a/linden/indra/newview/llviewerjointattachment.cpp b/linden/indra/newview/llviewerjointattachment.cpp
index bbab71b..f5a5d8a 100644
--- a/linden/indra/newview/llviewerjointattachment.cpp
+++ b/linden/indra/newview/llviewerjointattachment.cpp
@@ -38,7 +38,7 @@
38#include "llviewercontrol.h" 38#include "llviewercontrol.h"
39#include "lldrawable.h" 39#include "lldrawable.h"
40#include "llgl.h" 40#include "llgl.h"
41#include "llglimmediate.h" 41#include "llrender.h"
42#include "llvoavatar.h" 42#include "llvoavatar.h"
43#include "llvolume.h" 43#include "llvolume.h"
44#include "pipeline.h" 44#include "pipeline.h"
diff --git a/linden/indra/newview/llviewerjointmesh.cpp b/linden/indra/newview/llviewerjointmesh.cpp
index 4a0f0b8..0dcf4ab 100644
--- a/linden/indra/newview/llviewerjointmesh.cpp
+++ b/linden/indra/newview/llviewerjointmesh.cpp
@@ -36,6 +36,7 @@
36 36
37#include "imageids.h" 37#include "imageids.h"
38#include "llfasttimer.h" 38#include "llfasttimer.h"
39#include "llrender.h"
39 40
40#include "llagent.h" 41#include "llagent.h"
41#include "llapr.h" 42#include "llapr.h"
@@ -545,17 +546,7 @@ U32 LLViewerJointMesh::drawShape( F32 pixelArea, BOOL first_pass)
545 else 546 else
546 { 547 {
547 glColor4f(0.7f, 0.6f, 0.3f, 1.f); 548 glColor4f(0.7f, 0.6f, 0.3f, 1.f);
548 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB); 549 gGL.getTexUnit(0)->setTextureColorBlend(LLTexUnit::TBO_LERP_TEX_ALPHA, LLTexUnit::TBS_TEX_COLOR, LLTexUnit::TBS_PREV_COLOR);
549 glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_INTERPOLATE_ARB);
550
551 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB, GL_PREVIOUS_ARB);
552 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB_ARB, GL_SRC_COLOR);
553
554 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_RGB_ARB, GL_TEXTURE);
555 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_RGB_ARB, GL_SRC_COLOR);
556
557 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE2_RGB_ARB, GL_TEXTURE);
558 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND2_RGB_ARB, GL_ONE_MINUS_SRC_ALPHA);
559 } 550 }
560 } 551 }
561 else if( mLayerSet ) 552 else if( mLayerSet )
@@ -573,12 +564,10 @@ U32 LLViewerJointMesh::drawShape( F32 pixelArea, BOOL first_pass)
573 else 564 else
574 if ( mTexture.notNull() ) 565 if ( mTexture.notNull() )
575 { 566 {
576 mTexture->bind(); 567 if (!mTexture->getClampS() || !mTexture->getClampT())
577 if (!mTexture->getClampS()) { 568 {
578 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); 569 mTexture->bind();
579 } 570 mTexture->overrideClamp (TRUE, TRUE);
580 if (!mTexture->getClampT()) {
581 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
582 } 571 }
583 } 572 }
584 else 573 else
@@ -590,15 +579,8 @@ U32 LLViewerJointMesh::drawShape( F32 pixelArea, BOOL first_pass)
590 { 579 {
591 if (isTransparent()) 580 if (isTransparent())
592 { 581 {
593 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB); 582 gGL.getTexUnit(0)->setTextureColorBlend(LLTexUnit::TBO_REPLACE, LLTexUnit::TBS_PREV_COLOR);
594 glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_REPLACE); 583 gGL.getTexUnit(0)->setTextureAlphaBlend(LLTexUnit::TBO_MULT, LLTexUnit::TBS_TEX_ALPHA, LLTexUnit::TBS_CONST_ALPHA);
595 glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA_ARB, GL_MODULATE);
596
597 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB, GL_PREVIOUS_ARB);
598 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB_ARB, GL_SRC_COLOR);
599
600 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA_ARB, GL_TEXTURE); // GL_TEXTURE_ENV_COLOR is set in renderPass1
601 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_ALPHA_ARB, GL_SRC_ALPHA);
602 } 584 }
603 else 585 else
604 { 586 {
@@ -639,16 +621,13 @@ U32 LLViewerJointMesh::drawShape( F32 pixelArea, BOOL first_pass)
639 621
640 if (mTestImageName) 622 if (mTestImageName)
641 { 623 {
642 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); 624 gGL.getTexUnit(0)->setTextureBlendType(LLTexUnit::TB_MULT);
643 } 625 }
644 626
645 if (mTexture.notNull()) { 627 if (mTexture.notNull())
646 if (!mTexture->getClampS()) { 628 {
647 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); 629 mTexture->bind();
648 } 630 mTexture->restoreClamp();
649 if (!mTexture->getClampT()) {
650 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
651 }
652 } 631 }
653 632
654 return triangle_count; 633 return triangle_count;
@@ -870,9 +849,9 @@ void LLViewerJointMesh::updateVectorize()
870 case 1: vp = "SSE"; break; 849 case 1: vp = "SSE"; break;
871 default: vp = "COMPILER DEFAULT"; break; 850 default: vp = "COMPILER DEFAULT"; break;
872 } 851 }
873 llinfos << "Vectorization : " << ( vectorizeEnable ? "ENABLED" : "DISABLED" ) << llendl ; 852 LL_INFOS("AppInit") << "Vectorization : " << ( vectorizeEnable ? "ENABLED" : "DISABLED" ) << LL_ENDL ;
874 llinfos << "Vector Processor : " << vp << llendl ; 853 LL_INFOS("AppInit") << "Vector Processor : " << vp << LL_ENDL ;
875 llinfos << "Vectorized Skinning : " << ( vectorizeSkin ? "ENABLED" : "DISABLED" ) << llendl ; 854 LL_INFOS("AppInit") << "Vectorized Skinning : " << ( vectorizeSkin ? "ENABLED" : "DISABLED" ) << LL_ENDL ;
876 if(vectorizeEnable && vectorizeSkin) 855 if(vectorizeEnable && vectorizeSkin)
877 { 856 {
878 switch(sVectorizeProcessor) 857 switch(sVectorizeProcessor)
diff --git a/linden/indra/newview/llviewerjoystick.cpp b/linden/indra/newview/llviewerjoystick.cpp
index e9690f8..cf9d8a1 100644
--- a/linden/indra/newview/llviewerjoystick.cpp
+++ b/linden/indra/newview/llviewerjoystick.cpp
@@ -228,8 +228,38 @@ void LLViewerJoystick::init(bool autoenable)
228 mDriverState = JDS_UNINITIALIZED; 228 mDriverState = JDS_UNINITIALIZED;
229 } 229 }
230 } 230 }
231
232 // Autoenable the joystick for recognized devices if nothing was connected previously
233 if (!autoenable)
234 {
235 autoenable = gSavedSettings.getString("JoystickInitialized").empty() ? true : false;
236 }
231 updateEnabled(autoenable); 237 updateEnabled(autoenable);
232 238
239 if (mDriverState == JDS_INITIALIZED)
240 {
241 // A Joystick device is plugged in
242 if (isLikeSpaceNavigator())
243 {
244 // It's a space navigator, we have defaults for it.
245 if (gSavedSettings.getString("JoystickInitialized") != "SpaceNavigator")
246 {
247 // Only set the defaults if we haven't already (in case they were overridden)
248 setSNDefaults();
249 gSavedSettings.setString("JoystickInitialized", "SpaceNavigator");
250 }
251 }
252 else
253 {
254 // It's not a Space Navigator
255 gSavedSettings.setString("JoystickInitialized", "UnknownDevice");
256 }
257 }
258 else
259 {
260 // No device connected, don't change any settings
261 }
262
233 llinfos << "ndof: mDriverState=" << mDriverState << "; mNdofDev=" 263 llinfos << "ndof: mDriverState=" << mDriverState << "; mNdofDev="
234 << mNdofDev << "; libinit=" << libinit << llendl; 264 << mNdofDev << "; libinit=" << libinit << llendl;
235#endif 265#endif
diff --git a/linden/indra/newview/llviewerkeyboard.cpp b/linden/indra/newview/llviewerkeyboard.cpp
index 0d927ae..c732ae5 100644
--- a/linden/indra/newview/llviewerkeyboard.cpp
+++ b/linden/indra/newview/llviewerkeyboard.cpp
@@ -738,7 +738,7 @@ BOOL LLViewerKeyboard::bindKey(const S32 mode, const KEY key, const MASK mask, c
738 738
739S32 LLViewerKeyboard::loadBindings(const char *filename) 739S32 LLViewerKeyboard::loadBindings(const char *filename)
740{ 740{
741 FILE *fp; 741 LLFILE *fp;
742 const S32 BUFFER_SIZE = 2048; 742 const S32 BUFFER_SIZE = 2048;
743 char buffer[BUFFER_SIZE]; /* Flawfinder: ignore */ 743 char buffer[BUFFER_SIZE]; /* Flawfinder: ignore */
744 // *NOTE: This buffer size is hard coded into scanf() below. 744 // *NOTE: This buffer size is hard coded into scanf() below.
diff --git a/linden/indra/newview/llviewermenu.cpp b/linden/indra/newview/llviewermenu.cpp
index 2459133..00226dd 100644
--- a/linden/indra/newview/llviewermenu.cpp
+++ b/linden/indra/newview/llviewermenu.cpp
@@ -401,8 +401,8 @@ void handle_duplicate_in_place(void*);
401void handle_repeat_duplicate(void*); 401void handle_repeat_duplicate(void*);
402 402
403void handle_export(void*); 403void handle_export(void*);
404void handle_deed_object_to_group(void*); 404// void handle_deed_object_to_group(void*);
405BOOL enable_deed_object_to_group(void*); 405// BOOL enable_deed_object_to_group(void*);
406void handle_object_owner_self(void*); 406void handle_object_owner_self(void*);
407void handle_object_owner_permissive(void*); 407void handle_object_owner_permissive(void*);
408void handle_object_lock(void*); 408void handle_object_lock(void*);
@@ -515,7 +515,7 @@ public:
515 515
516 virtual void changed(U32 mask) 516 virtual void changed(U32 mask)
517 { 517 {
518 // JAMESDEBUG disabled for now - slows down client or causes crashes 518 // JC - Disabled for now - slows down client or causes crashes
519 // in inventory code. 519 // in inventory code.
520 // 520 //
521 // Also, this may not be faster than just rebuilding the menu each time. 521 // Also, this may not be faster than just rebuilding the menu each time.
@@ -700,7 +700,7 @@ void init_menus()
700 gPopupMenuView->setBackgroundColor( color ); 700 gPopupMenuView->setBackgroundColor( color );
701 701
702 // If we are not in production, use a different color to make it apparent. 702 // If we are not in production, use a different color to make it apparent.
703 if (LLAppViewer::instance()->isInProductionGrid()) 703 if (LLViewerLogin::getInstance()->isInProductionGrid())
704 { 704 {
705 color = gColors.getColor( "MenuBarBgColor" ); 705 color = gColors.getColor( "MenuBarBgColor" );
706 } 706 }
@@ -722,7 +722,7 @@ void init_menus()
722 gViewerWindow->getRootView()->addChild(gMenuHolder); 722 gViewerWindow->getRootView()->addChild(gMenuHolder);
723 723
724 gViewerWindow->setMenuBackgroundColor(false, 724 gViewerWindow->setMenuBackgroundColor(false,
725 LLAppViewer::instance()->isInProductionGrid()); 725 LLViewerLogin::getInstance()->isInProductionGrid());
726 726
727 // *TODO:Get the cost info from the server 727 // *TODO:Get the cost info from the server
728 const LLString upload_cost("10"); 728 const LLString upload_cost("10");
@@ -739,7 +739,7 @@ void init_menus()
739 // TomY TODO convert these two 739 // TomY TODO convert these two
740 LLMenuGL*menu; 740 LLMenuGL*menu;
741 741
742 // JAMESDEBUG - Maybe we don't want a global landmark menu 742 // JC - Maybe we don't want a global landmark menu
743 /* 743 /*
744 menu = new LLMenuGL(LANDMARK_MENU_NAME); 744 menu = new LLMenuGL(LANDMARK_MENU_NAME);
745 // Defer init_landmark_menu() until inventory observer reports that we actually 745 // Defer init_landmark_menu() until inventory observer reports that we actually
@@ -969,7 +969,7 @@ void init_client_menu(LLMenuGL* menu)
969 969
970 970
971#ifdef TOGGLE_HACKED_GODLIKE_VIEWER 971#ifdef TOGGLE_HACKED_GODLIKE_VIEWER
972 if (!LLAppViewer::instance()->isInProductionGrid()) 972 if (!LLViewerLogin::getInstance()->isInProductionGrid())
973 { 973 {
974 menu->append(new LLMenuItemCheckGL("Hacked Godmode", 974 menu->append(new LLMenuItemCheckGL("Hacked Godmode",
975 &handle_toggle_hacked_godmode, 975 &handle_toggle_hacked_godmode,
@@ -1064,7 +1064,7 @@ void init_client_menu(LLMenuGL* menu)
1064 1064
1065 menu->appendSeparator(); 1065 menu->appendSeparator();
1066 1066
1067 menu->append(new LLMenuItemCallGL("Compress Image...", 1067 menu->append(new LLMenuItemCallGL("Compress Images...",
1068 &handle_compress_image, NULL, NULL)); 1068 &handle_compress_image, NULL, NULL));
1069 1069
1070 menu->append(new LLMenuItemCheckGL("Limit Select Distance", 1070 menu->append(new LLMenuItemCheckGL("Limit Select Distance",
@@ -1096,7 +1096,9 @@ void init_client_menu(LLMenuGL* menu)
1096 { 1096 {
1097 LLMenuGL* sub = NULL; 1097 LLMenuGL* sub = NULL;
1098 sub = new LLMenuGL("Debugging"); 1098 sub = new LLMenuGL("Debugging");
1099#if LL_WINDOWS
1099 sub->append(new LLMenuItemCallGL("Force Breakpoint", &force_error_breakpoint, NULL, NULL, 'B', MASK_CONTROL | MASK_ALT)); 1100 sub->append(new LLMenuItemCallGL("Force Breakpoint", &force_error_breakpoint, NULL, NULL, 'B', MASK_CONTROL | MASK_ALT));
1101#endif
1100 sub->append(new LLMenuItemCallGL("Force LLError And Crash", &force_error_llerror)); 1102 sub->append(new LLMenuItemCallGL("Force LLError And Crash", &force_error_llerror));
1101 sub->append(new LLMenuItemCallGL("Force Bad Memory Access", &force_error_bad_memory_access)); 1103 sub->append(new LLMenuItemCallGL("Force Bad Memory Access", &force_error_bad_memory_access));
1102 sub->append(new LLMenuItemCallGL("Force Infinite Loop", &force_error_infinite_loop)); 1104 sub->append(new LLMenuItemCallGL("Force Infinite Loop", &force_error_infinite_loop));
@@ -1189,7 +1191,7 @@ void init_debug_ui_menu(LLMenuGL* menu)
1189 menu->append(new LLMenuItemCallGL( "Dump Focus Holder", &handle_dump_focus, NULL, NULL, 'F', MASK_ALT | MASK_CONTROL)); 1191 menu->append(new LLMenuItemCallGL( "Dump Focus Holder", &handle_dump_focus, NULL, NULL, 'F', MASK_ALT | MASK_CONTROL));
1190 menu->append(new LLMenuItemCallGL( "Print Selected Object Info", &print_object_info, NULL, NULL, 'P', MASK_CONTROL|MASK_SHIFT )); 1192 menu->append(new LLMenuItemCallGL( "Print Selected Object Info", &print_object_info, NULL, NULL, 'P', MASK_CONTROL|MASK_SHIFT ));
1191 menu->append(new LLMenuItemCallGL( "Print Agent Info", &print_agent_nvpairs, NULL, NULL, 'P', MASK_SHIFT )); 1193 menu->append(new LLMenuItemCallGL( "Print Agent Info", &print_agent_nvpairs, NULL, NULL, 'P', MASK_SHIFT ));
1192 menu->append(new LLMenuItemCallGL( "Texture Memory Stats", &output_statistics, NULL, NULL, 'M', MASK_SHIFT | MASK_ALT | MASK_CONTROL)); 1194 menu->append(new LLMenuItemCallGL( "Memory Stats", &output_statistics, NULL, NULL, 'M', MASK_SHIFT | MASK_ALT | MASK_CONTROL));
1193 menu->append(new LLMenuItemCheckGL("Double-Click Auto-Pilot", 1195 menu->append(new LLMenuItemCheckGL("Double-Click Auto-Pilot",
1194 menu_toggle_control, NULL, menu_check_control, 1196 menu_toggle_control, NULL, menu_check_control,
1195 (void*)"DoubleClickAutoPilot")); 1197 (void*)"DoubleClickAutoPilot"));
@@ -1429,6 +1431,12 @@ void init_debug_rendering_menu(LLMenuGL* menu)
1429 item = new LLMenuItemCheckGL("Object-Object Occlusion", menu_toggle_control, NULL, menu_check_control, (void*)"UseOcclusion", 'O', MASK_CONTROL|MASK_SHIFT); 1431 item = new LLMenuItemCheckGL("Object-Object Occlusion", menu_toggle_control, NULL, menu_check_control, (void*)"UseOcclusion", 'O', MASK_CONTROL|MASK_SHIFT);
1430 item->setEnabled(gGLManager.mHasOcclusionQuery && LLFeatureManager::getInstance()->isFeatureAvailable("UseOcclusion")); 1432 item->setEnabled(gGLManager.mHasOcclusionQuery && LLFeatureManager::getInstance()->isFeatureAvailable("UseOcclusion"));
1431 menu->append(item); 1433 menu->append(item);
1434
1435 item = new LLMenuItemCheckGL("Debug GL", menu_toggle_control, NULL, menu_check_control, (void*)"RenderDebugGL");
1436 menu->append(item);
1437
1438 item = new LLMenuItemCheckGL("Debug Pipeline", menu_toggle_control, NULL, menu_check_control, (void*)"RenderDebugPipeline");
1439 menu->append(item);
1432 1440
1433 item = new LLMenuItemCheckGL("Fast Alpha", menu_toggle_control, NULL, menu_check_control, (void*)"RenderFastAlpha"); 1441 item = new LLMenuItemCheckGL("Fast Alpha", menu_toggle_control, NULL, menu_check_control, (void*)"RenderFastAlpha");
1434 menu->append(item); 1442 menu->append(item);
@@ -1490,6 +1498,7 @@ void init_debug_avatar_menu(LLMenuGL* menu)
1490 1498
1491 menu->appendMenu(sub_menu); 1499 menu->appendMenu(sub_menu);
1492 1500
1501 menu->append(new LLMenuItemCheckGL("Enable Lip Sync (Beta)", menu_toggle_control, NULL, menu_check_control, (void*)"LipSyncEnabled"));
1493 menu->append(new LLMenuItemToggleGL("Tap-Tap-Hold To Run", &gAllowTapTapHoldRun)); 1502 menu->append(new LLMenuItemToggleGL("Tap-Tap-Hold To Run", &gAllowTapTapHoldRun));
1494 menu->append(new LLMenuItemCallGL("Force Params to Default", &LLAgent::clearVisualParams, NULL)); 1503 menu->append(new LLMenuItemCallGL("Force Params to Default", &LLAgent::clearVisualParams, NULL));
1495 menu->append(new LLMenuItemCallGL("Reload Vertex Shader", &reload_vertex_shader, NULL)); 1504 menu->append(new LLMenuItemCallGL("Reload Vertex Shader", &reload_vertex_shader, NULL));
@@ -1501,7 +1510,8 @@ void init_debug_avatar_menu(LLMenuGL* menu)
1501 menu->append(new LLMenuItemToggleGL("Disable LOD", &LLViewerJoint::sDisableLOD)); 1510 menu->append(new LLMenuItemToggleGL("Disable LOD", &LLViewerJoint::sDisableLOD));
1502 menu->append(new LLMenuItemToggleGL("Debug Character Vis", &LLVOAvatar::sDebugInvisible)); 1511 menu->append(new LLMenuItemToggleGL("Debug Character Vis", &LLVOAvatar::sDebugInvisible));
1503 //menu->append(new LLMenuItemToggleGL("Show Attachment Points", &LLVOAvatar::sShowAttachmentPoints)); 1512 //menu->append(new LLMenuItemToggleGL("Show Attachment Points", &LLVOAvatar::sShowAttachmentPoints));
1504 menu->append(new LLMenuItemToggleGL("Show Collision Plane", &LLVOAvatar::sShowFootPlane)); 1513 //diabling collision plane due to DEV-14477 -brad
1514 //menu->append(new LLMenuItemToggleGL("Show Collision Plane", &LLVOAvatar::sShowFootPlane));
1505 menu->append(new LLMenuItemToggleGL("Show Collision Skeleton", &LLVOAvatar::sShowCollisionVolumes)); 1515 menu->append(new LLMenuItemToggleGL("Show Collision Skeleton", &LLVOAvatar::sShowCollisionVolumes));
1506 menu->append(new LLMenuItemToggleGL( "Display Agent Target", &LLAgent::sDebugDisplayTarget)); 1516 menu->append(new LLMenuItemToggleGL( "Display Agent Target", &LLAgent::sDebugDisplayTarget));
1507 menu->append(new LLMenuItemToggleGL( "Debug Rotation", &gDebugAvatarRotation)); 1517 menu->append(new LLMenuItemToggleGL( "Debug Rotation", &gDebugAvatarRotation));
@@ -2753,7 +2763,7 @@ void set_god_level(U8 god_level)
2753 if(gViewerWindow) 2763 if(gViewerWindow)
2754 { 2764 {
2755 gViewerWindow->setMenuBackgroundColor(god_level > GOD_NOT, 2765 gViewerWindow->setMenuBackgroundColor(god_level > GOD_NOT,
2756 LLAppViewer::instance()->isInProductionGrid()); 2766 LLViewerLogin::getInstance()->isInProductionGrid());
2757 } 2767 }
2758 2768
2759 LLString::format_map_t args; 2769 LLString::format_map_t args;
@@ -3163,6 +3173,21 @@ class LLWorldFly : public view_listener_t
3163 } 3173 }
3164}; 3174};
3165 3175
3176class LLWorldEnableFly : public view_listener_t
3177{
3178 bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
3179 {
3180 BOOL sitting = FALSE;
3181 if (gAgent.getAvatarObject())
3182 {
3183 sitting = gAgent.getAvatarObject()->mIsSitting;
3184 }
3185 gMenuHolder->findControl(userdata["control"].asString())->setValue(!sitting);
3186 return true;
3187 }
3188};
3189
3190
3166void handle_agent_stop_moving(void*) 3191void handle_agent_stop_moving(void*)
3167{ 3192{
3168 // stop agent 3193 // stop agent
@@ -3476,6 +3501,7 @@ void handle_repeat_duplicate(void*)
3476 LLSelectMgr::getInstance()->repeatDuplicate(); 3501 LLSelectMgr::getInstance()->repeatDuplicate();
3477} 3502}
3478 3503
3504/* dead code 30-apr-2008
3479void handle_deed_object_to_group(void*) 3505void handle_deed_object_to_group(void*)
3480{ 3506{
3481 LLUUID group_id; 3507 LLUUID group_id;
@@ -3501,6 +3527,8 @@ BOOL enable_deed_object_to_group(void*)
3501 return FALSE; 3527 return FALSE;
3502} 3528}
3503 3529
3530*/
3531
3504 3532
3505/* 3533/*
3506 * No longer able to support viewer side manipulations in this way 3534 * No longer able to support viewer side manipulations in this way
@@ -4072,7 +4100,7 @@ BOOL enable_take()
4072 return TRUE; 4100 return TRUE;
4073#else 4101#else
4074# ifdef TOGGLE_HACKED_GODLIKE_VIEWER 4102# ifdef TOGGLE_HACKED_GODLIKE_VIEWER
4075 if (!LLAppViewer::instance()->isInProductionGrid() 4103 if (!LLViewerLogin::getInstance()->isInProductionGrid()
4076 && gAgent.isGodlike()) 4104 && gAgent.isGodlike())
4077 { 4105 {
4078 return TRUE; 4106 return TRUE;
@@ -4629,7 +4657,7 @@ class LLObjectEnableDelete : public view_listener_t
4629 TRUE; 4657 TRUE;
4630#else 4658#else
4631# ifdef TOGGLE_HACKED_GODLIKE_VIEWER 4659# ifdef TOGGLE_HACKED_GODLIKE_VIEWER
4632 (!LLAppViewer::instance()->isInProductionGrid() 4660 (!LLViewerLogin::getInstance()->isInProductionGrid()
4633 && gAgent.isGodlike()) || 4661 && gAgent.isGodlike()) ||
4634# endif 4662# endif
4635 LLSelectMgr::getInstance()->canDoDelete(); 4663 LLSelectMgr::getInstance()->canDoDelete();
@@ -6487,7 +6515,7 @@ class LLToolsEnableTakeCopy : public view_listener_t
6487 all_valid = true; 6515 all_valid = true;
6488#ifndef HACKED_GODLIKE_VIEWER 6516#ifndef HACKED_GODLIKE_VIEWER
6489# ifdef TOGGLE_HACKED_GODLIKE_VIEWER 6517# ifdef TOGGLE_HACKED_GODLIKE_VIEWER
6490 if (LLAppViewer::instance()->isInProductionGrid() 6518 if (LLViewerLogin::getInstance()->isInProductionGrid()
6491 || !gAgent.isGodlike()) 6519 || !gAgent.isGodlike())
6492# endif 6520# endif
6493 { 6521 {
@@ -6591,7 +6619,7 @@ BOOL enable_save_into_inventory(void*)
6591 return TRUE; 6619 return TRUE;
6592#else 6620#else
6593# ifdef TOGGLE_HACKED_GODLIKE_VIEWER 6621# ifdef TOGGLE_HACKED_GODLIKE_VIEWER
6594 if (!LLAppViewer::instance()->isInProductionGrid() 6622 if (!LLViewerLogin::getInstance()->isInProductionGrid()
6595 && gAgent.isGodlike()) 6623 && gAgent.isGodlike())
6596 { 6624 {
6597 return TRUE; 6625 return TRUE;
@@ -7766,6 +7794,7 @@ void initialize_menus()
7766 addMenu(new LLWorldChat(), "World.Chat"); 7794 addMenu(new LLWorldChat(), "World.Chat");
7767 addMenu(new LLWorldAlwaysRun(), "World.AlwaysRun"); 7795 addMenu(new LLWorldAlwaysRun(), "World.AlwaysRun");
7768 addMenu(new LLWorldFly(), "World.Fly"); 7796 addMenu(new LLWorldFly(), "World.Fly");
7797 addMenu(new LLWorldEnableFly(), "World.EnableFly");
7769 addMenu(new LLWorldCreateLandmark(), "World.CreateLandmark"); 7798 addMenu(new LLWorldCreateLandmark(), "World.CreateLandmark");
7770 addMenu(new LLWorldSetHomeLocation(), "World.SetHomeLocation"); 7799 addMenu(new LLWorldSetHomeLocation(), "World.SetHomeLocation");
7771 addMenu(new LLWorldTeleportHome(), "World.TeleportHome"); 7800 addMenu(new LLWorldTeleportHome(), "World.TeleportHome");
diff --git a/linden/indra/newview/llviewermenufile.cpp b/linden/indra/newview/llviewermenufile.cpp
index ab77b53..b8a4f65 100644
--- a/linden/indra/newview/llviewermenufile.cpp
+++ b/linden/indra/newview/llviewermenufile.cpp
@@ -414,18 +414,6 @@ class LLFileTakeSnapshotToDisk : public view_listener_t
414 } 414 }
415}; 415};
416 416
417class LLFileSetWindowSize : public view_listener_t
418{
419 bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
420 {
421 LLString size = userdata.asString();
422 S32 width, height;
423 sscanf(size.c_str(), "%d,%d", &width, &height);
424 LLViewerWindow::movieSize(width, height);
425 return true;
426 }
427};
428
429class LLFileQuit : public view_listener_t 417class LLFileQuit : public view_listener_t
430{ 418{
431 bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata) 419 bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
@@ -448,25 +436,31 @@ void handle_upload(void* data)
448void handle_compress_image(void*) 436void handle_compress_image(void*)
449{ 437{
450 LLFilePicker& picker = LLFilePicker::instance(); 438 LLFilePicker& picker = LLFilePicker::instance();
451 if (picker.getOpenFile(LLFilePicker::FFLOAD_IMAGE)) 439 if (picker.getMultipleOpenFiles(LLFilePicker::FFLOAD_IMAGE))
452 { 440 {
453 std::string infile(picker.getFirstFile()); 441 const char* input_file = picker.getFirstFile();
454 std::string outfile = infile + ".j2c"; 442 while (input_file)
443 {
444 std::string infile(input_file);
445 std::string outfile = infile + ".j2c";
455 446
456 llinfos << "Input: " << infile << llendl; 447 llinfos << "Input: " << infile << llendl;
457 llinfos << "Output: " << outfile << llendl; 448 llinfos << "Output: " << outfile << llendl;
458 449
459 BOOL success; 450 BOOL success;
460 451
461 success = LLViewerImageList::createUploadFile(infile, outfile, IMG_CODEC_TGA); 452 success = LLViewerImageList::createUploadFile(infile, outfile, IMG_CODEC_TGA);
462 453
463 if (success) 454 if (success)
464 { 455 {
465 llinfos << "Compression complete" << llendl; 456 llinfos << "Compression complete" << llendl;
466 } 457 }
467 else 458 else
468 { 459 {
469 llinfos << "Compression failed: " << LLImageBase::getLastError() << llendl; 460 llinfos << "Compression failed: " << LLImageBase::getLastError() << llendl;
461 }
462
463 input_file = picker.getNextFile();
470 } 464 }
471 } 465 }
472} 466}
@@ -603,7 +597,7 @@ void upload_new_resource(const LLString& src_filename, std::string name,
603 { 597 {
604 // This is a generic .lin resource file 598 // This is a generic .lin resource file
605 asset_type = LLAssetType::AT_OBJECT; 599 asset_type = LLAssetType::AT_OBJECT;
606 FILE* in = LLFile::fopen(src_filename.c_str(), "rb"); /* Flawfinder: ignore */ 600 LLFILE* in = LLFile::fopen(src_filename.c_str(), "rb"); /* Flawfinder: ignore */
607 if (in) 601 if (in)
608 { 602 {
609 // read in the file header 603 // read in the file header
@@ -688,7 +682,7 @@ void upload_new_resource(const LLString& src_filename, std::string name,
688 } 682 }
689 683
690 // copy the file's data segment into another file for uploading 684 // copy the file's data segment into another file for uploading
691 FILE* out = LLFile::fopen(filename.c_str(), "wb"); /* Flawfinder: ignore */ 685 LLFILE* out = LLFile::fopen(filename.c_str(), "wb"); /* Flawfinder: ignore */
692 if (out) 686 if (out)
693 { 687 {
694 while((read = fread(buf, 1, 16384, in))) /* Flawfinder: ignore */ 688 while((read = fread(buf, 1, 16384, in))) /* Flawfinder: ignore */
@@ -1024,7 +1018,6 @@ void init_menu_file()
1024 (new LLFileSaveTexture())->registerListener(gMenuHolder, "File.SaveTexture"); 1018 (new LLFileSaveTexture())->registerListener(gMenuHolder, "File.SaveTexture");
1025 (new LLFileTakeSnapshot())->registerListener(gMenuHolder, "File.TakeSnapshot"); 1019 (new LLFileTakeSnapshot())->registerListener(gMenuHolder, "File.TakeSnapshot");
1026 (new LLFileTakeSnapshotToDisk())->registerListener(gMenuHolder, "File.TakeSnapshotToDisk"); 1020 (new LLFileTakeSnapshotToDisk())->registerListener(gMenuHolder, "File.TakeSnapshotToDisk");
1027 (new LLFileSetWindowSize())->registerListener(gMenuHolder, "File.SetWindowSize");
1028 (new LLFileQuit())->registerListener(gMenuHolder, "File.Quit"); 1021 (new LLFileQuit())->registerListener(gMenuHolder, "File.Quit");
1029 1022
1030 (new LLFileEnableUpload())->registerListener(gMenuHolder, "File.EnableUpload"); 1023 (new LLFileEnableUpload())->registerListener(gMenuHolder, "File.EnableUpload");
diff --git a/linden/indra/newview/llviewermessage.cpp b/linden/indra/newview/llviewermessage.cpp
index a9adbcd..7cc833a 100644
--- a/linden/indra/newview/llviewermessage.cpp
+++ b/linden/indra/newview/llviewermessage.cpp
@@ -202,7 +202,7 @@ void give_money(const LLUUID& uuid, LLViewerRegion* region, S32 amount, BOOL is_
202{ 202{
203 if(0 == amount) return; 203 if(0 == amount) return;
204 amount = abs(amount); 204 amount = abs(amount);
205 llinfos << "give_money(" << uuid << "," << amount << ")"<< llendl; 205 LL_INFOS("Messaging") << "give_money(" << uuid << "," << amount << ")"<< LL_ENDL;
206 if(can_afford_transaction(amount)) 206 if(can_afford_transaction(amount))
207 { 207 {
208// gStatusBar->debitBalance(amount); 208// gStatusBar->debitBalance(amount);
@@ -242,7 +242,7 @@ void send_complete_agent_movement(const LLHost& sim_host)
242void process_logout_reply(LLMessageSystem* msg, void**) 242void process_logout_reply(LLMessageSystem* msg, void**)
243{ 243{
244 // The server has told us it's ok to quit. 244 // The server has told us it's ok to quit.
245 llinfos << "process_logout_reply" << llendl; 245 LL_DEBUGS("Messaging") << "process_logout_reply" << LL_ENDL;
246 246
247 LLUUID agent_id; 247 LLUUID agent_id;
248 msg->getUUID("AgentData", "AgentID", agent_id); 248 msg->getUUID("AgentData", "AgentID", agent_id);
@@ -250,7 +250,7 @@ void process_logout_reply(LLMessageSystem* msg, void**)
250 msg->getUUID("AgentData", "SessionID", session_id); 250 msg->getUUID("AgentData", "SessionID", session_id);
251 if((agent_id != gAgent.getID()) || (session_id != gAgent.getSessionID())) 251 if((agent_id != gAgent.getID()) || (session_id != gAgent.getSessionID()))
252 { 252 {
253 llwarns << "Bogus Logout Reply" << llendl; 253 LL_WARNS("Messaging") << "Bogus Logout Reply" << LL_ENDL;
254 } 254 }
255 255
256 LLInventoryModel::update_map_t parents; 256 LLInventoryModel::update_map_t parents;
@@ -268,7 +268,7 @@ void process_logout_reply(LLMessageSystem* msg, void**)
268 268
269 // We do not need to track the asset ids, just account for an 269 // We do not need to track the asset ids, just account for an
270 // updated inventory version. 270 // updated inventory version.
271 llinfos << "process_logout_reply itemID=" << item_id << llendl; 271 LL_INFOS("Messaging") << "process_logout_reply itemID=" << item_id << LL_ENDL;
272 LLInventoryItem* item = gInventory.getItem( item_id ); 272 LLInventoryItem* item = gInventory.getItem( item_id );
273 if( item ) 273 if( item )
274 { 274 {
@@ -277,7 +277,7 @@ void process_logout_reply(LLMessageSystem* msg, void**)
277 } 277 }
278 else 278 else
279 { 279 {
280 llinfos << "process_logout_reply item not found: " << item_id << llendl; 280 LL_INFOS("Messaging") << "process_logout_reply item not found: " << item_id << LL_ENDL;
281 } 281 }
282 } 282 }
283 LLAppViewer::instance()->forceQuit(); 283 LLAppViewer::instance()->forceQuit();
@@ -300,15 +300,15 @@ void process_layer_data(LLMessageSystem *mesgsys, void **user_data)
300 size = mesgsys->getSizeFast(_PREHASH_LayerData, _PREHASH_Data); 300 size = mesgsys->getSizeFast(_PREHASH_LayerData, _PREHASH_Data);
301 if (0 == size) 301 if (0 == size)
302 { 302 {
303 llwarns << "Layer data has zero size." << llendl; 303 LL_WARNS("Messaging") << "Layer data has zero size." << LL_ENDL;
304 return; 304 return;
305 } 305 }
306 if (size < 0) 306 if (size < 0)
307 { 307 {
308 // getSizeFast() is probably trying to tell us about an error 308 // getSizeFast() is probably trying to tell us about an error
309 llwarns << "getSizeFast() returned negative result: " 309 LL_WARNS("Messaging") << "getSizeFast() returned negative result: "
310 << size 310 << size
311 << llendl; 311 << LL_ENDL;
312 return; 312 return;
313 } 313 }
314 U8 *datap = new U8[size]; 314 U8 *datap = new U8[size];
@@ -345,7 +345,7 @@ void export_complete()
345 gExporterRequestID.setNull(); 345 gExporterRequestID.setNull();
346 gExportDirectory = ""; 346 gExportDirectory = "";
347 347
348 FILE* fXML = LLFile::fopen(gExportedFile.c_str(), "rb"); /* Flawfinder: ignore */ 348 LLFILE* fXML = LLFile::fopen(gExportedFile.c_str(), "rb"); /* Flawfinder: ignore */
349 fseek(fXML, 0, SEEK_END); 349 fseek(fXML, 0, SEEK_END);
350 long length = ftell(fXML); 350 long length = ftell(fXML);
351 fseek(fXML, 0, SEEK_SET); 351 fseek(fXML, 0, SEEK_SET);
@@ -353,7 +353,7 @@ void export_complete()
353 size_t nread = fread(buffer, 1, length, fXML); 353 size_t nread = fread(buffer, 1, length, fXML);
354 if (nread < (size_t) length) 354 if (nread < (size_t) length)
355 { 355 {
356 llwarns << "Short read" << llendl; 356 LL_WARNS("Messaging") << "Short read" << LL_ENDL;
357 } 357 }
358 buffer[nread] = '\0'; 358 buffer[nread] = '\0';
359 fclose(fXML); 359 fclose(fXML);
@@ -375,12 +375,12 @@ void export_complete()
375 375
376 LLUUID image_uuid(image_uuid_str); 376 LLUUID image_uuid(image_uuid_str);
377 377
378 llinfos << "Found UUID: " << image_uuid << llendl; 378 LL_INFOS("Messaging") << "Found UUID: " << image_uuid << LL_ENDL;
379 379
380 std::map<LLUUID, LLString>::iterator itor = gImageChecksums.find(image_uuid); 380 std::map<LLUUID, LLString>::iterator itor = gImageChecksums.find(image_uuid);
381 if (itor != gImageChecksums.end()) 381 if (itor != gImageChecksums.end())
382 { 382 {
383 llinfos << "Replacing with checksum: " << itor->second << llendl; 383 LL_INFOS("Messaging") << "Replacing with checksum: " << itor->second << LL_ENDL;
384 if (itor->second.c_str() != NULL) 384 if (itor->second.c_str() != NULL)
385 { 385 {
386 memcpy(&pos_check[10], itor->second.c_str(), 32); /* Flawfinder: ignore */ 386 memcpy(&pos_check[10], itor->second.c_str(), 32); /* Flawfinder: ignore */
@@ -390,10 +390,10 @@ void export_complete()
390 } 390 }
391 } 391 }
392 392
393 FILE* fXMLOut = LLFile::fopen(gExportedFile.c_str(), "wb"); /* Flawfinder: ignore */ 393 LLFILE* fXMLOut = LLFile::fopen(gExportedFile.c_str(), "wb"); /* Flawfinder: ignore */
394 if (fwrite(buffer, 1, length, fXMLOut) != length) 394 if (fwrite(buffer, 1, length, fXMLOut) != length)
395 { 395 {
396 llwarns << "Short write" << llendl; 396 LL_WARNS("Messaging") << "Short write" << LL_ENDL;
397 } 397 }
398 fclose(fXMLOut); 398 fclose(fXMLOut);
399 399
@@ -407,14 +407,14 @@ void exported_item_complete(const LLTSCode status, void *user_data)
407 407
408 if (status < LLTS_OK) 408 if (status < LLTS_OK)
409 { 409 {
410 llinfos << "Export failed!" << llendl; 410 LL_WARNS("Messaging") << "Export failed!" << LL_ENDL;
411 } 411 }
412 else 412 else
413 { 413 {
414 ++current_object_count; 414 ++current_object_count;
415 if (current_image_count == exported_image_count && current_object_count == exported_object_count) 415 if (current_image_count == exported_image_count && current_object_count == exported_object_count)
416 { 416 {
417 llinfos << "*** Export complete ***" << llendl; 417 LL_INFOS("Messaging") << "*** Export complete ***" << LL_ENDL;
418 418
419 export_complete(); 419 export_complete();
420 } 420 }
@@ -442,11 +442,11 @@ void exported_j2c_complete(const LLTSCode status, void *user_data)
442 442
443 if (status < LLTS_OK) 443 if (status < LLTS_OK)
444 { 444 {
445 llinfos << "Image download failed!" << llendl; 445 LL_WARNS("Messaging") << "Image download failed!" << LL_ENDL;
446 } 446 }
447 else 447 else
448 { 448 {
449 FILE* fIn = LLFile::fopen(filename.c_str(), "rb"); /* Flawfinder: ignore */ 449 LLFILE* fIn = LLFile::fopen(filename.c_str(), "rb"); /* Flawfinder: ignore */
450 if (fIn) 450 if (fIn)
451 { 451 {
452 LLPointer<LLImageJ2C> ImageUtility = new LLImageJ2C; 452 LLPointer<LLImageJ2C> ImageUtility = new LLImageJ2C;
@@ -458,7 +458,7 @@ void exported_j2c_complete(const LLTSCode status, void *user_data)
458 U8 *buffer = ImageUtility->allocateData(length); 458 U8 *buffer = ImageUtility->allocateData(length);
459 if (fread(buffer, 1, length, fIn) != length) 459 if (fread(buffer, 1, length, fIn) != length)
460 { 460 {
461 llwarns << "Short read" << llendl; 461 LL_WARNS("Messaging") << "Short read" << LL_ENDL;
462 } 462 }
463 fclose(fIn); 463 fclose(fIn);
464 LLFile::remove(filename.c_str()); 464 LLFile::remove(filename.c_str());
@@ -481,14 +481,14 @@ void exported_j2c_complete(const LLTSCode status, void *user_data)
481 delete [] file_path; 481 delete [] file_path;
482 //S32 name_len = output_file.length(); 482 //S32 name_len = output_file.length();
483 //strcpy(&output_file[name_len-3], "tga"); 483 //strcpy(&output_file[name_len-3], "tga");
484 FILE* fOut = LLFile::fopen(output_file.c_str(), "wb"); /* Flawfinder: ignore */ 484 LLFILE* fOut = LLFile::fopen(output_file.c_str(), "wb"); /* Flawfinder: ignore */
485 char md5_hash_string[33]; /* Flawfinder: ignore */ 485 char md5_hash_string[33]; /* Flawfinder: ignore */
486 strcpy(md5_hash_string, "00000000000000000000000000000000"); /* Flawfinder: ignore */ 486 strcpy(md5_hash_string, "00000000000000000000000000000000"); /* Flawfinder: ignore */
487 if (fOut) 487 if (fOut)
488 { 488 {
489 if (fwrite(data, 1, data_size, fOut) != data_size) 489 if (fwrite(data, 1, data_size, fOut) != data_size)
490 { 490 {
491 llwarns << "Short write" << llendl; 491 LL_WARNS("Messaging") << "Short write" << LL_ENDL;
492 } 492 }
493 fseek(fOut, 0, SEEK_SET); 493 fseek(fOut, 0, SEEK_SET);
494 fclose(fOut); 494 fclose(fOut);
@@ -504,7 +504,7 @@ void exported_j2c_complete(const LLTSCode status, void *user_data)
504 ++current_image_count; 504 ++current_image_count;
505 if (current_image_count == exported_image_count && current_object_count == exported_object_count) 505 if (current_image_count == exported_image_count && current_object_count == exported_object_count)
506 { 506 {
507 llinfos << "*** Export textures complete ***" << llendl; 507 LL_INFOS("Messaging") << "*** Export textures complete ***" << LL_ENDL;
508 export_complete(); 508 export_complete();
509 } 509 }
510 else 510 else
@@ -533,7 +533,7 @@ void process_places_reply(LLMessageSystem* msg, void** data)
533 } 533 }
534 else 534 else
535 { 535 {
536 llwarns << "Got invalid PlacesReply message" << llendl; 536 LL_WARNS("Messaging") << "Got invalid PlacesReply message" << LL_ENDL;
537 } 537 }
538} 538}
539 539
@@ -705,7 +705,7 @@ public:
705 virtual ~LLDiscardAgentOffer() {} 705 virtual ~LLDiscardAgentOffer() {}
706 virtual void done() 706 virtual void done()
707 { 707 {
708 lldebugs << "LLDiscardAgentOffer::done()" << llendl; 708 LL_DEBUGS("Messaging") << "LLDiscardAgentOffer::done()" << LL_ENDL;
709 LLUUID trash_id; 709 LLUUID trash_id;
710 trash_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_TRASH); 710 trash_id = gInventory.findCategoryUUIDForType(LLAssetType::AT_TRASH);
711 bool notify = false; 711 bool notify = false;
@@ -729,9 +729,9 @@ public:
729 } 729 }
730 else 730 else
731 { 731 {
732 llwarns << "DiscardAgentOffer unable to find: " 732 LL_WARNS("Messaging") << "DiscardAgentOffer unable to find: "
733 << (trash_id.isNull() ? "trash " : "") 733 << (trash_id.isNull() ? "trash " : "")
734 << (mObjectID.isNull() ? "object" : "") << llendl; 734 << (mObjectID.isNull() ? "object" : "") << LL_ENDL;
735 } 735 }
736 gInventory.removeObserver(this); 736 gInventory.removeObserver(this);
737 if(notify) 737 if(notify)
@@ -766,14 +766,14 @@ bool check_offer_throttle(const std::string& from_name, bool check_only)
766 766
767 if(gThrottleTimer.checkExpirationAndReset(OFFER_THROTTLE_TIME)) 767 if(gThrottleTimer.checkExpirationAndReset(OFFER_THROTTLE_TIME))
768 { 768 {
769 //llinfos << "Throttle Expired" << llendl; 769 LL_DEBUGS("Messaging") << "Throttle Expired" << LL_ENDL;
770 throttle_count=1; 770 throttle_count=1;
771 throttle_logged=false; 771 throttle_logged=false;
772 return true; 772 return true;
773 } 773 }
774 else //has not expired 774 else //has not expired
775 { 775 {
776 //llinfos << "Throttle Not Expired, Count: " << throttle_count << llendl; 776 LL_DEBUGS("Messaging") << "Throttle Not Expired, Count: " << throttle_count << LL_ENDL;
777 // When downloading the initial inventory we get a lot of new items 777 // When downloading the initial inventory we get a lot of new items
778 // coming in and can't tell that from spam. JC 778 // coming in and can't tell that from spam. JC
779 if (LLStartUp::getStartupState() >= STATE_STARTED 779 if (LLStartUp::getStartupState() >= STATE_STARTED
@@ -821,7 +821,7 @@ void open_offer(const std::vector<LLUUID>& items, const std::string& from_name)
821 item = gInventory.getItem(*it); 821 item = gInventory.getItem(*it);
822 if(!item) 822 if(!item)
823 { 823 {
824 llwarns << "Unable to show inventory item: " << *it << llendl; 824 LL_WARNS("Messaging") << "Unable to show inventory item: " << *it << LL_ENDL;
825 continue; 825 continue;
826 } 826 }
827 if(gInventory.isObjectDescendentOf(*it, trash_id)) 827 if(gInventory.isObjectDescendentOf(*it, trash_id))
@@ -880,7 +880,7 @@ void open_offer(const std::vector<LLUUID>& items, const std::string& from_name)
880 //don't dick with highlight while the user is working 880 //don't dick with highlight while the user is working
881 //if(inventory_has_focus && !user_is_away) 881 //if(inventory_has_focus && !user_is_away)
882 // break; 882 // break;
883 //llinfos << "Highlighting" << item->getUUID() << llendl; 883 LL_DEBUGS("Messaging") << "Highlighting" << item->getUUID() << LL_ENDL;
884 //highlight item 884 //highlight item
885 885
886 LLUICtrl* focus_ctrl = gFocusMgr.getKeyboardFocus(); 886 LLUICtrl* focus_ctrl = gFocusMgr.getKeyboardFocus();
@@ -1041,8 +1041,8 @@ void inventory_offer_callback(S32 button, void* user_data)
1041 } 1041 }
1042 1042
1043 // we will want to open this item when it comes back. 1043 // we will want to open this item when it comes back.
1044 lldebugs << "Initializing an opener for tid: " << info->mTransactionID 1044 LL_DEBUGS("Messaging") << "Initializing an opener for tid: " << info->mTransactionID
1045 << llendl; 1045 << LL_ENDL;
1046 switch (info->mIM) 1046 switch (info->mIM)
1047 { 1047 {
1048 case IM_INVENTORY_OFFERED: 1048 case IM_INVENTORY_OFFERED:
@@ -1075,7 +1075,7 @@ void inventory_offer_callback(S32 button, void* user_data)
1075 } 1075 }
1076 break; 1076 break;
1077 default: 1077 default:
1078 llwarns << "inventory_offer_callback: unknown offer type" << llendl; 1078 LL_WARNS("Messaging") << "inventory_offer_callback: unknown offer type" << LL_ENDL;
1079 break; 1079 break;
1080 } // end switch (info->mIM) 1080 } // end switch (info->mIM)
1081 break; 1081 break;
@@ -1187,11 +1187,11 @@ void inventory_offer_handler(LLOfferInfo* info, BOOL from_task)
1187 } 1187 }
1188 else 1188 else
1189 { 1189 {
1190 llwarns << "LLAssetType::lookupHumanReadable() returned NULL - probably bad asset type: " << info->mType << llendl; 1190 LL_WARNS("Messaging") << "LLAssetType::lookupHumanReadable() returned NULL - probably bad asset type: " << info->mType << LL_ENDL;
1191 args["[OBJECTTYPE]"] = ""; 1191 args["[OBJECTTYPE]"] = "";
1192 1192
1193 // This seems safest, rather than propagating bogosity 1193 // This seems safest, rather than propagating bogosity
1194 llwarns << "Forcing an inventory-decline for probably-bad asset type." << llendl; 1194 LL_WARNS("Messaging") << "Forcing an inventory-decline for probably-bad asset type." << LL_ENDL;
1195 inventory_offer_callback(IOR_DECLINE, info); 1195 inventory_offer_callback(IOR_DECLINE, info);
1196 return; 1196 return;
1197 } 1197 }
@@ -1278,10 +1278,6 @@ void lure_callback(S32 option, void* user_data)
1278 case 0: 1278 case 0:
1279 { 1279 {
1280 // accept 1280 // accept
1281 send_simple_im(info->mFromID,
1282 "",
1283 IM_LURE_ACCEPTED,
1284 info->mLureID);
1285 gAgent.teleportViaLure(info->mLureID, info->mGodlike); 1281 gAgent.teleportViaLure(info->mLureID, info->mGodlike);
1286 } 1282 }
1287 break; 1283 break;
@@ -1426,9 +1422,9 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)
1426 1422
1427 // now store incoming IM in chat history 1423 // now store incoming IM in chat history
1428 1424
1429 snprintf(buffer, sizeof(buffer), "%s%s%s", name, separator_string, (message+message_offset)); /* Flawfinder: ignore */ 1425 snprintf(buffer, sizeof(buffer), "%s%s", separator_string, (message+message_offset)); /* Flawfinder: ignore */
1430 1426
1431 llinfos << "process_improved_im: session_id( " << session_id << " ), from_id( " << from_id << " )" << llendl; 1427 LL_INFOS("Messaging") << "process_improved_im: session_id( " << session_id << " ), from_id( " << from_id << " )" << LL_ENDL;
1432 1428
1433 // add to IM panel, but do not bother the user 1429 // add to IM panel, but do not bother the user
1434 gIMMgr->addMessage( 1430 gIMMgr->addMessage(
@@ -1440,7 +1436,8 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)
1440 dialog, 1436 dialog,
1441 parent_estate_id, 1437 parent_estate_id,
1442 region_id, 1438 region_id,
1443 position); 1439 position,
1440 true);
1444 1441
1445 // pretend this is chat generated by self, so it does not show up on screen 1442 // pretend this is chat generated by self, so it does not show up on screen
1446 snprintf(buffer, sizeof(buffer), "IM: %s%s%s", name, separator_string, (message+message_offset)); /* Flawfinder: ignore */ 1443 snprintf(buffer, sizeof(buffer), "IM: %s%s%s", name, separator_string, (message+message_offset)); /* Flawfinder: ignore */
@@ -1481,9 +1478,9 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)
1481 snprintf(saved, MAX_STRING, "(Saved %s) ", /* Flawfinder: ignore */ 1478 snprintf(saved, MAX_STRING, "(Saved %s) ", /* Flawfinder: ignore */
1482 formatted_time(timestamp, time_buf)); 1479 formatted_time(timestamp, time_buf));
1483 } 1480 }
1484 snprintf(buffer, sizeof(buffer), "%s%s%s%s", name, separator_string, saved,(message+message_offset)); /* Flawfinder: ignore */ 1481 snprintf(buffer, sizeof(buffer), "%s%s%s", separator_string, saved,(message+message_offset)); /* Flawfinder: ignore */
1485 1482
1486 llinfos << "process_improved_im: session_id( " << session_id << " ), from_id( " << from_id << " )" << llendl; 1483 LL_INFOS("Messaging") << "process_improved_im: session_id( " << session_id << " ), from_id( " << from_id << " )" << LL_ENDL;
1487 1484
1488 if (!is_muted || is_linden) 1485 if (!is_muted || is_linden)
1489 { 1486 {
@@ -1496,7 +1493,8 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)
1496 dialog, 1493 dialog,
1497 parent_estate_id, 1494 parent_estate_id,
1498 region_id, 1495 region_id,
1499 position); 1496 position,
1497 true);
1500 snprintf(buffer, sizeof(buffer), "IM: %s%s%s%s", name, separator_string, saved, (message+message_offset)); /* Flawfinder: ignore */ 1498 snprintf(buffer, sizeof(buffer), "IM: %s%s%s%s", name, separator_string, saved, (message+message_offset)); /* Flawfinder: ignore */
1501 1499
1502 chat.mText = buffer; 1500 chat.mText = buffer;
@@ -1540,7 +1538,7 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)
1540 case IM_GROUP_NOTICE: 1538 case IM_GROUP_NOTICE:
1541 case IM_GROUP_NOTICE_REQUESTED: 1539 case IM_GROUP_NOTICE_REQUESTED:
1542 { 1540 {
1543 llinfos << "Received IM_GROUP_NOTICE message." << llendl; 1541 LL_INFOS("Messaging") << "Received IM_GROUP_NOTICE message." << LL_ENDL;
1544 // Read the binary bucket for more information. 1542 // Read the binary bucket for more information.
1545 struct notice_bucket_header_t 1543 struct notice_bucket_header_t
1546 { 1544 {
@@ -1559,7 +1557,7 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)
1559 if ( (binary_bucket_size < (S32)((sizeof(notice_bucket_header_t) + sizeof(U8)))) 1557 if ( (binary_bucket_size < (S32)((sizeof(notice_bucket_header_t) + sizeof(U8))))
1560 || (binary_bucket[binary_bucket_size - 1] != '\0') ) 1558 || (binary_bucket[binary_bucket_size - 1] != '\0') )
1561 { 1559 {
1562 llwarns << "Malformed group notice binary bucket" << llendl; 1560 LL_WARNS("Messaging") << "Malformed group notice binary bucket" << LL_ENDL;
1563 break; 1561 break;
1564 } 1562 }
1565 1563
@@ -1625,7 +1623,7 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)
1625 } 1623 }
1626 else 1624 else
1627 { 1625 {
1628 llinfos << "Received IM_GROUP_INVITATION message." << llendl; 1626 LL_INFOS("Messaging") << "Received IM_GROUP_INVITATION message." << LL_ENDL;
1629 // Read the binary bucket for more information. 1627 // Read the binary bucket for more information.
1630 struct invite_bucket_t 1628 struct invite_bucket_t
1631 { 1629 {
@@ -1636,7 +1634,7 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)
1636 // Make sure the binary bucket is the correct size. 1634 // Make sure the binary bucket is the correct size.
1637 if (binary_bucket_size != sizeof(invite_bucket_t)) 1635 if (binary_bucket_size != sizeof(invite_bucket_t))
1638 { 1636 {
1639 llwarns << "Malformed group invite binary bucket" << llendl; 1637 LL_WARNS("Messaging") << "Malformed group invite binary bucket" << LL_ENDL;
1640 break; 1638 break;
1641 } 1639 }
1642 1640
@@ -1675,7 +1673,7 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)
1675 1673
1676 if (sizeof(offer_agent_bucket_t) != binary_bucket_size) 1674 if (sizeof(offer_agent_bucket_t) != binary_bucket_size)
1677 { 1675 {
1678 llwarns << "Malformed inventory offer from agent" << llendl; 1676 LL_WARNS("Messaging") << "Malformed inventory offer from agent" << LL_ENDL;
1679 break; 1677 break;
1680 } 1678 }
1681 bucketp = (struct offer_agent_bucket_t*) &binary_bucket[0]; 1679 bucketp = (struct offer_agent_bucket_t*) &binary_bucket[0];
@@ -1686,7 +1684,7 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)
1686 { 1684 {
1687 if (sizeof(S8) != binary_bucket_size) 1685 if (sizeof(S8) != binary_bucket_size)
1688 { 1686 {
1689 llwarns << "Malformed inventory offer from object" << llendl; 1687 LL_WARNS("Messaging") << "Malformed inventory offer from object" << LL_ENDL;
1690 break; 1688 break;
1691 } 1689 }
1692 info->mType = (LLAssetType::EType) binary_bucket[0]; 1690 info->mType = (LLAssetType::EType) binary_bucket[0];
@@ -1747,7 +1745,7 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)
1747 1745
1748 case IM_GROUP_ELECTION_DEPRECATED: 1746 case IM_GROUP_ELECTION_DEPRECATED:
1749 { 1747 {
1750 llwarns << "Received IM: IM_GROUP_ELECTION_DEPRECATED" << llendl; 1748 LL_WARNS("Messaging") << "Received IM: IM_GROUP_ELECTION_DEPRECATED" << LL_ENDL;
1751 } 1749 }
1752 break; 1750 break;
1753 1751
@@ -1776,7 +1774,7 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)
1776 "(Saved %s) ", 1774 "(Saved %s) ",
1777 formatted_time(timestamp, time_buf)); 1775 formatted_time(timestamp, time_buf));
1778 } 1776 }
1779 snprintf(buffer, sizeof(buffer), "%s%s%s%s", name, separator_string, saved, (message+message_offset)); /* Flawfinder: ignore */ 1777 snprintf(buffer, sizeof(buffer), "%s%s%s", separator_string, saved, (message+message_offset)); /* Flawfinder: ignore */
1780 BOOL is_this_agent = FALSE; 1778 BOOL is_this_agent = FALSE;
1781 if(from_id == gAgentID) 1779 if(from_id == gAgentID)
1782 { 1780 {
@@ -1791,7 +1789,8 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)
1791 IM_SESSION_INVITE, 1789 IM_SESSION_INVITE,
1792 parent_estate_id, 1790 parent_estate_id,
1793 region_id, 1791 region_id,
1794 position); 1792 position,
1793 true);
1795 1794
1796 snprintf(buffer, sizeof(buffer), "IM: %s%s%s%s", name, separator_string, saved, (message+message_offset)); /* Flawfinder: ignore */ 1795 snprintf(buffer, sizeof(buffer), "IM: %s%s%s%s", name, separator_string, saved, (message+message_offset)); /* Flawfinder: ignore */
1797 chat.mText = buffer; 1796 chat.mText = buffer;
@@ -1826,7 +1825,7 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)
1826 case IM_BUSY_AUTO_RESPONSE: 1825 case IM_BUSY_AUTO_RESPONSE:
1827 if (is_muted) 1826 if (is_muted)
1828 { 1827 {
1829 lldebugs << "Ignoring busy response from " << from_id << llendl; 1828 LL_DEBUGS("Messaging") << "Ignoring busy response from " << from_id << LL_ENDL;
1830 return; 1829 return;
1831 } 1830 }
1832 else 1831 else
@@ -1874,16 +1873,16 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)
1874 // URLs sent by scripts (i.e. llLoadURL) 1873 // URLs sent by scripts (i.e. llLoadURL)
1875 if (binary_bucket_size <= 0) 1874 if (binary_bucket_size <= 0)
1876 { 1875 {
1877 llwarns << "bad binary_bucket_size: " 1876 LL_WARNS("Messaging") << "bad binary_bucket_size: "
1878 << binary_bucket_size 1877 << binary_bucket_size
1879 << " - aborting function." << llendl; 1878 << " - aborting function." << LL_ENDL;
1880 return; 1879 return;
1881 } 1880 }
1882 1881
1883 char* url = new char[binary_bucket_size]; 1882 char* url = new char[binary_bucket_size];
1884 if (url == NULL) 1883 if (url == NULL)
1885 { 1884 {
1886 llerrs << "Memory Allocation failed" << llendl; 1885 LL_ERRS("Messaging") << "Memory Allocation failed" << LL_ENDL;
1887 return; 1886 return;
1888 } 1887 }
1889 1888
@@ -1944,8 +1943,8 @@ void process_improved_im(LLMessageSystem *msg, void **user_data)
1944 break; 1943 break;
1945 1944
1946 default: 1945 default:
1947 llwarns << "Instant message calling for unknown dialog " 1946 LL_WARNS("Messaging") << "Instant message calling for unknown dialog "
1948 << (S32)dialog << llendl; 1947 << (S32)dialog << LL_ENDL;
1949 break; 1948 break;
1950 } 1949 }
1951 1950
@@ -1960,6 +1959,8 @@ void busy_message (LLMessageSystem* msg, LLUUID from_id)
1960{ 1959{
1961 if (gAgent.getBusy()) 1960 if (gAgent.getBusy())
1962 { 1961 {
1962 std::string my_name;
1963 gAgent.buildFullname(my_name);
1963 LLString response = gSavedPerAccountSettings.getText("BusyModeResponse"); 1964 LLString response = gSavedPerAccountSettings.getText("BusyModeResponse");
1964 pack_instant_message( 1965 pack_instant_message(
1965 gMessageSystem, 1966 gMessageSystem,
@@ -1967,10 +1968,10 @@ void busy_message (LLMessageSystem* msg, LLUUID from_id)
1967 FALSE, 1968 FALSE,
1968 gAgent.getSessionID(), 1969 gAgent.getSessionID(),
1969 from_id, 1970 from_id,
1970 SYSTEM_FROM, 1971 my_name.c_str(),
1971 response.c_str(), 1972 response.c_str(),
1972 IM_ONLINE, 1973 IM_ONLINE,
1973 IM_CONSOLE_AND_CHAT_HISTORY); 1974 IM_BUSY_AUTO_RESPONSE);
1974 gAgent.sendReliableMessage(); 1975 gAgent.sendReliableMessage();
1975 } 1976 }
1976} 1977}
@@ -2071,7 +2072,7 @@ void callingcard_offer_callback(S32 option, void* user_data)
2071void process_offer_callingcard(LLMessageSystem* msg, void**) 2072void process_offer_callingcard(LLMessageSystem* msg, void**)
2072{ 2073{
2073 // someone has offered to form a friendship 2074 // someone has offered to form a friendship
2074 lldebugs << "callingcard offer" << llendl; 2075 LL_DEBUGS("Messaging") << "callingcard offer" << LL_ENDL;
2075 2076
2076 LLUUID source_id; 2077 LLUUID source_id;
2077 msg->getUUIDFast(_PREHASH_AgentData, _PREHASH_AgentID, source_id); 2078 msg->getUUIDFast(_PREHASH_AgentData, _PREHASH_AgentID, source_id);
@@ -2116,7 +2117,7 @@ void process_offer_callingcard(LLMessageSystem* msg, void**)
2116 } 2117 }
2117 else 2118 else
2118 { 2119 {
2119 llwarns << "Calling card offer from an unknown source." << llendl; 2120 LL_WARNS("Messaging") << "Calling card offer from an unknown source." << LL_ENDL;
2120 } 2121 }
2121 2122
2122 delete offerdata; // !=NULL if we didn't give ownership away 2123 delete offerdata; // !=NULL if we didn't give ownership away
@@ -2309,10 +2310,10 @@ void process_chat_from_simulator(LLMessageSystem *msg, void **user_data)
2309 break; 2310 break;
2310 case CHAT_TYPE_START: 2311 case CHAT_TYPE_START:
2311 case CHAT_TYPE_STOP: 2312 case CHAT_TYPE_STOP:
2312 llwarns << "Got chat type start/stop in main chat processing." << llendl; 2313 LL_WARNS("Messaging") << "Got chat type start/stop in main chat processing." << LL_ENDL;
2313 break; 2314 break;
2314 default: 2315 default:
2315 llwarns << "Unknown type " << chat.mChatType << " in chat!" << llendl; 2316 LL_WARNS("Messaging") << "Unknown type " << chat.mChatType << " in chat!" << LL_ENDL;
2316 verb = " say, "; 2317 verb = " say, ";
2317 break; 2318 break;
2318 } 2319 }
@@ -2405,7 +2406,7 @@ void process_teleport_progress(LLMessageSystem* msg, void**)
2405 if((gAgent.getID() != agent_id) 2406 if((gAgent.getID() != agent_id)
2406 || (gAgent.getTeleportState() == LLAgent::TELEPORT_NONE)) 2407 || (gAgent.getTeleportState() == LLAgent::TELEPORT_NONE))
2407 { 2408 {
2408 llwarns << "Unexpected teleport progress message." << llendl; 2409 LL_WARNS("Messaging") << "Unexpected teleport progress message." << LL_ENDL;
2409 return; 2410 return;
2410 } 2411 }
2411 U32 teleport_flags = 0x0; 2412 U32 teleport_flags = 0x0;
@@ -2420,7 +2421,7 @@ void process_teleport_progress(LLMessageSystem* msg, void**)
2420 } 2421 }
2421 char buffer[MAX_STRING]; /* Flawfinder: ignore */ 2422 char buffer[MAX_STRING]; /* Flawfinder: ignore */
2422 msg->getString("Info", "Message", MAX_STRING, buffer); 2423 msg->getString("Info", "Message", MAX_STRING, buffer);
2423 lldebugs << "teleport progress: " << buffer << llendl; 2424 LL_DEBUGS("Messaging") << "teleport progress: " << buffer << LL_ENDL;
2424 2425
2425 //Sorta hacky...default to using simulator raw messages 2426 //Sorta hacky...default to using simulator raw messages
2426 //if we don't find the coresponding mapping in our progress mappings 2427 //if we don't find the coresponding mapping in our progress mappings
@@ -2544,12 +2545,12 @@ BOOL LLPostTeleportNotifiers::tick()
2544// We're going to pretend to be a new agent 2545// We're going to pretend to be a new agent
2545void process_teleport_finish(LLMessageSystem* msg, void**) 2546void process_teleport_finish(LLMessageSystem* msg, void**)
2546{ 2547{
2547 //llinfos << "Got teleport location message" << llendl; 2548 LL_DEBUGS("Messaging") << "Got teleport location message" << LL_ENDL;
2548 LLUUID agent_id; 2549 LLUUID agent_id;
2549 msg->getUUIDFast(_PREHASH_Info, _PREHASH_AgentID, agent_id); 2550 msg->getUUIDFast(_PREHASH_Info, _PREHASH_AgentID, agent_id);
2550 if (agent_id != gAgent.getID()) 2551 if (agent_id != gAgent.getID())
2551 { 2552 {
2552 llwarns << "Got teleport notification for wrong agent!" << llendl; 2553 LL_WARNS("Messaging") << "Got teleport notification for wrong agent!" << LL_ENDL;
2553 return; 2554 return;
2554 } 2555 }
2555 2556
@@ -2617,8 +2618,8 @@ void process_teleport_finish(LLMessageSystem* msg, void**)
2617*/ 2618*/
2618 2619
2619 // now, use the circuit info to tell simulator about us! 2620 // now, use the circuit info to tell simulator about us!
2620 llinfos << "process_teleport_finish() Enabling " 2621 LL_INFOS("Messaging") << "process_teleport_finish() Enabling "
2621 << sim_host << " with code " << msg->mOurCircuitCode << llendl; 2622 << sim_host << " with code " << msg->mOurCircuitCode << LL_ENDL;
2622 msg->newMessageFast(_PREHASH_UseCircuitCode); 2623 msg->newMessageFast(_PREHASH_UseCircuitCode);
2623 msg->nextBlockFast(_PREHASH_CircuitCode); 2624 msg->nextBlockFast(_PREHASH_CircuitCode);
2624 msg->addU32Fast(_PREHASH_Code, msg->getOurCircuitCode()); 2625 msg->addU32Fast(_PREHASH_Code, msg->getOurCircuitCode());
@@ -2679,12 +2680,12 @@ void process_agent_movement_complete(LLMessageSystem* msg, void**)
2679 msg->getUUIDFast(_PREHASH_AgentData, _PREHASH_SessionID, session_id); 2680 msg->getUUIDFast(_PREHASH_AgentData, _PREHASH_SessionID, session_id);
2680 if((gAgent.getID() != agent_id) || (gAgent.getSessionID() != session_id)) 2681 if((gAgent.getID() != agent_id) || (gAgent.getSessionID() != session_id))
2681 { 2682 {
2682 llwarns << "Incorrect id in process_agent_movement_complete()" 2683 LL_WARNS("Messaging") << "Incorrect id in process_agent_movement_complete()"
2683 << llendl; 2684 << LL_ENDL;
2684 return; 2685 return;
2685 } 2686 }
2686 2687
2687 llinfos << "process_agent_movement_complete()" << llendl; 2688 LL_DEBUGS("Messaging") << "process_agent_movement_complete()" << LL_ENDL;
2688 2689
2689 // *TODO: check timestamp to make sure the movement compleation 2690 // *TODO: check timestamp to make sure the movement compleation
2690 // makes sense. 2691 // makes sense.
@@ -2703,7 +2704,7 @@ void process_agent_movement_complete(LLMessageSystem* msg, void**)
2703 { 2704 {
2704 // Could happen if you were immediately god-teleported away on login, 2705 // Could happen if you were immediately god-teleported away on login,
2705 // maybe other cases. Continue, but warn. JC 2706 // maybe other cases. Continue, but warn. JC
2706 llwarns << "agent_movement_complete() with NULL avatarp." << llendl; 2707 LL_WARNS("Messaging") << "agent_movement_complete() with NULL avatarp." << LL_ENDL;
2707 } 2708 }
2708 2709
2709 F32 x, y; 2710 F32 x, y;
@@ -2713,19 +2714,19 @@ void process_agent_movement_complete(LLMessageSystem* msg, void**)
2713 { 2714 {
2714 if (gAgent.getRegion()) 2715 if (gAgent.getRegion())
2715 { 2716 {
2716 llwarns << "current region " << gAgent.getRegion()->getOriginGlobal() << llendl; 2717 LL_WARNS("Messaging") << "current region " << gAgent.getRegion()->getOriginGlobal() << LL_ENDL;
2717 } 2718 }
2718 2719
2719 llwarns << "Agent being sent to invalid home region: " 2720 LL_WARNS("Messaging") << "Agent being sent to invalid home region: "
2720 << x << ":" << y 2721 << x << ":" << y
2721 << " current pos " << gAgent.getPositionGlobal() 2722 << " current pos " << gAgent.getPositionGlobal()
2722 << llendl; 2723 << LL_ENDL;
2723 LLAppViewer::instance()->forceDisconnect("You were sent to an invalid region."); 2724 LLAppViewer::instance()->forceDisconnect("You were sent to an invalid region.");
2724 return; 2725 return;
2725 2726
2726 } 2727 }
2727 2728
2728 llinfos << "Changing home region to " << x << ":" << y << llendl; 2729 LL_INFOS("Messaging") << "Changing home region to " << x << ":" << y << LL_ENDL;
2729 2730
2730 // set our upstream host the new simulator and shuffle things as 2731 // set our upstream host the new simulator and shuffle things as
2731 // appropriate. 2732 // appropriate.
@@ -2845,11 +2846,11 @@ void process_crossed_region(LLMessageSystem* msg, void**)
2845 msg->getUUIDFast(_PREHASH_AgentData, _PREHASH_SessionID, session_id); 2846 msg->getUUIDFast(_PREHASH_AgentData, _PREHASH_SessionID, session_id);
2846 if((gAgent.getID() != agent_id) || (gAgent.getSessionID() != session_id)) 2847 if((gAgent.getID() != agent_id) || (gAgent.getSessionID() != session_id))
2847 { 2848 {
2848 llwarns << "Incorrect id in process_crossed_region()" 2849 LL_WARNS("Messaging") << "Incorrect id in process_crossed_region()"
2849 << llendl; 2850 << LL_ENDL;
2850 return; 2851 return;
2851 } 2852 }
2852 llinfos << "process_crossed_region()" << llendl; 2853 LL_INFOS("Messaging") << "process_crossed_region()" << LL_ENDL;
2853 2854
2854 U32 sim_ip; 2855 U32 sim_ip;
2855 msg->getIPAddrFast(_PREHASH_RegionData, _PREHASH_SimIP, sim_ip); 2856 msg->getIPAddrFast(_PREHASH_RegionData, _PREHASH_SimIP, sim_ip);
@@ -2977,24 +2978,24 @@ void send_agent_update(BOOL force_send, BOOL send_reliable)
2977/* 2978/*
2978 if (head_rot_chg < THRESHOLD_HEAD_ROT_QDOT) 2979 if (head_rot_chg < THRESHOLD_HEAD_ROT_QDOT)
2979 { 2980 {
2980 //llinfos << "head rot " << head_rotation << llendl; 2981 //LL_INFOS("Messaging") << "head rot " << head_rotation << LL_ENDL;
2981 llinfos << "head_rot_chg = " << head_rot_chg << llendl; 2982 LL_INFOS("Messaging") << "head_rot_chg = " << head_rot_chg << LL_ENDL;
2982 } 2983 }
2983 if (cam_rot_chg.magVec() > ROTATION_THRESHOLD) 2984 if (cam_rot_chg.magVec() > ROTATION_THRESHOLD)
2984 { 2985 {
2985 llinfos << "cam rot " << cam_rot_chg.magVec() << llendl; 2986 LL_INFOS("Messaging") << "cam rot " << cam_rot_chg.magVec() << LL_ENDL;
2986 } 2987 }
2987 if (cam_center_chg.magVec() > TRANSLATE_THRESHOLD) 2988 if (cam_center_chg.magVec() > TRANSLATE_THRESHOLD)
2988 { 2989 {
2989 llinfos << "cam center " << cam_center_chg.magVec() << llendl; 2990 LL_INFOS("Messaging") << "cam center " << cam_center_chg.magVec() << LL_ENDL;
2990 } 2991 }
2991// if (drag_delta_chg.magVec() > TRANSLATE_THRESHOLD) 2992// if (drag_delta_chg.magVec() > TRANSLATE_THRESHOLD)
2992// { 2993// {
2993// llinfos << "drag delta " << drag_delta_chg.magVec() << llendl; 2994// LL_INFOS("Messaging") << "drag delta " << drag_delta_chg.magVec() << LL_ENDL;
2994// } 2995// }
2995 if (control_flag_change) 2996 if (control_flag_change)
2996 { 2997 {
2997 llinfos << "dcf = " << control_flag_change << llendl; 2998 LL_INFOS("Messaging") << "dcf = " << control_flag_change << LL_ENDL;
2998 } 2999 }
2999*/ 3000*/
3000 3001
@@ -3043,7 +3044,7 @@ void send_agent_update(BOOL force_send, BOOL send_reliable)
3043 3044
3044// if (camera_pos_agent.mV[VY] > 255.f) 3045// if (camera_pos_agent.mV[VY] > 255.f)
3045// { 3046// {
3046// llinfos << "Sending camera center " << camera_pos_agent << llendl; 3047// LL_INFOS("Messaging") << "Sending camera center " << camera_pos_agent << LL_ENDL;
3047// } 3048// }
3048 3049
3049 msg->addVector3Fast(_PREHASH_CameraCenter, camera_pos_agent); 3050 msg->addVector3Fast(_PREHASH_CameraCenter, camera_pos_agent);
@@ -3058,12 +3059,12 @@ void send_agent_update(BOOL force_send, BOOL send_reliable)
3058 { 3059 {
3059 if (control_flags & AGENT_CONTROL_LBUTTON_DOWN) 3060 if (control_flags & AGENT_CONTROL_LBUTTON_DOWN)
3060 { 3061 {
3061 llinfos << "AgentUpdate left button down" << llendl; 3062 LL_INFOS("Messaging") << "AgentUpdate left button down" << LL_ENDL;
3062 } 3063 }
3063 3064
3064 if (control_flags & AGENT_CONTROL_LBUTTON_UP) 3065 if (control_flags & AGENT_CONTROL_LBUTTON_UP)
3065 { 3066 {
3066 llinfos << "AgentUpdate left button up" << llendl; 3067 LL_INFOS("Messaging") << "AgentUpdate left button up" << LL_ENDL;
3067 } 3068 }
3068 } 3069 }
3069 3070
@@ -3078,7 +3079,7 @@ void send_agent_update(BOOL force_send, BOOL send_reliable)
3078 gAgent.sendReliableMessage(); 3079 gAgent.sendReliableMessage();
3079 } 3080 }
3080 3081
3081 //llinfos << "agent " << avatar_pos_agent << " cam " << camera_pos_agent << llendl; 3082// LL_DEBUGS("Messaging") << "agent " << avatar_pos_agent << " cam " << camera_pos_agent << LL_ENDL;
3082 3083
3083 // Copy the old data 3084 // Copy the old data
3084 last_head_rot = head_rotation; 3085 last_head_rot = head_rotation;
@@ -3191,13 +3192,13 @@ void process_kill_object(LLMessageSystem *mesgsys, void **user_data)
3191 gMessageSystem->getSenderPort()); 3192 gMessageSystem->getSenderPort());
3192 if (id == LLUUID::null) 3193 if (id == LLUUID::null)
3193 { 3194 {
3194 //llinfos << "Unknown kill for local " << local_id << llendl; 3195 LL_DEBUGS("Messaging") << "Unknown kill for local " << local_id << LL_ENDL;
3195 gObjectList.mNumUnknownKills++; 3196 gObjectList.mNumUnknownKills++;
3196 continue; 3197 continue;
3197 } 3198 }
3198 else 3199 else
3199 { 3200 {
3200 //llinfos << "Kill message for local " << local_id << llendl; 3201 LL_DEBUGS("Messaging") << "Kill message for local " << local_id << LL_ENDL;
3201 } 3202 }
3202 3203
3203 LLSelectMgr::getInstance()->removeObjectFromSelections(id); 3204 LLSelectMgr::getInstance()->removeObjectFromSelections(id);
@@ -3227,7 +3228,7 @@ void process_kill_object(LLMessageSystem *mesgsys, void **user_data)
3227 } 3228 }
3228 else 3229 else
3229 { 3230 {
3230 llwarns << "Object in UUID lookup, but not on object list in kill!" << llendl; 3231 LL_WARNS("Messaging") << "Object in UUID lookup, but not on object list in kill!" << LL_ENDL;
3231 gObjectList.mNumUnknownKills++; 3232 gObjectList.mNumUnknownKills++;
3232 } 3233 }
3233 } 3234 }
@@ -3256,8 +3257,8 @@ void process_time_synch(LLMessageSystem *mesgsys, void **user_data)
3256 3257
3257 LLWorld::getInstance()->setSpaceTimeUSec(space_time_usec); 3258 LLWorld::getInstance()->setSpaceTimeUSec(space_time_usec);
3258 3259
3259 //lldebugs << "time_synch() - " << sun_direction << ", " << sun_ang_velocity 3260 //LL_DEBUGS("Messaging") << "time_synch() - " << sun_direction << ", " << sun_ang_velocity
3260 // << ", " << phase << llendl; 3261 // << ", " << phase << LL_ENDL;
3261 3262
3262 gSky.setSunPhase(phase); 3263 gSky.setSunPhase(phase);
3263 gSky.setSunTargetDirection(sun_direction, sun_ang_velocity); 3264 gSky.setSunTargetDirection(sun_direction, sun_ang_velocity);
@@ -3509,7 +3510,8 @@ void process_sim_stats(LLMessageSystem *msg, void **user_data)
3509 LLViewerStats::getInstance()->mPhysicsMemoryAllocated.addValue(stat_value); 3510 LLViewerStats::getInstance()->mPhysicsMemoryAllocated.addValue(stat_value);
3510 break; 3511 break;
3511 default: 3512 default:
3512// llwarns << "Unknown stat id" << stat_id << llendl; 3513 // Used to be a commented out warning.
3514 LL_DEBUGS("Messaging") << "Unknown stat id" << stat_id << LL_ENDL;
3513 break; 3515 break;
3514 } 3516 }
3515 } 3517 }
@@ -3576,7 +3578,7 @@ void process_avatar_animation(LLMessageSystem *mesgsys, void **user_data)
3576 if (!avatarp) 3578 if (!avatarp)
3577 { 3579 {
3578 // no agent by this ID...error? 3580 // no agent by this ID...error?
3579 llwarns << "Received animation state for unknown avatar" << uuid << llendl; 3581 LL_WARNS("Messaging") << "Received animation state for unknown avatar" << uuid << LL_ENDL;
3580 return; 3582 return;
3581 } 3583 }
3582 3584
@@ -3594,7 +3596,7 @@ void process_avatar_animation(LLMessageSystem *mesgsys, void **user_data)
3594 mesgsys->getUUIDFast(_PREHASH_AnimationList, _PREHASH_AnimID, animation_id, i); 3596 mesgsys->getUUIDFast(_PREHASH_AnimationList, _PREHASH_AnimID, animation_id, i);
3595 mesgsys->getS32Fast(_PREHASH_AnimationList, _PREHASH_AnimSequenceID, anim_sequence_id, i); 3597 mesgsys->getS32Fast(_PREHASH_AnimationList, _PREHASH_AnimSequenceID, anim_sequence_id, i);
3596 3598
3597 //llinfos << "Anim sequence ID: " << anim_sequence_id << llendl; 3599 LL_DEBUGS("Messaging") << "Anim sequence ID: " << anim_sequence_id << LL_ENDL;
3598 3600
3599 avatarp->mSignaledAnimations[animation_id] = anim_sequence_id; 3601 avatarp->mSignaledAnimations[animation_id] = anim_sequence_id;
3600 3602
@@ -3654,7 +3656,7 @@ void process_avatar_appearance(LLMessageSystem *mesgsys, void **user_data)
3654 } 3656 }
3655 else 3657 else
3656 { 3658 {
3657 llwarns << "avatar_appearance sent for unknown avatar " << uuid << llendl; 3659 LL_WARNS("Messaging") << "avatar_appearance sent for unknown avatar " << uuid << LL_ENDL;
3658 } 3660 }
3659} 3661}
3660 3662
@@ -3720,7 +3722,7 @@ void process_avatar_sit_response(LLMessageSystem *mesgsys, void **user_data)
3720 } 3722 }
3721 else 3723 else
3722 { 3724 {
3723 llwarns << "Received sit approval for unknown object " << sitObjectID << llendl; 3725 LL_WARNS("Messaging") << "Received sit approval for unknown object " << sitObjectID << LL_ENDL;
3724 } 3726 }
3725} 3727}
3726 3728
@@ -3870,13 +3872,13 @@ void process_name_value(LLMessageSystem *mesgsys, void **user_data)
3870 for (i = 0; i < num_blocks; i++) 3872 for (i = 0; i < num_blocks; i++)
3871 { 3873 {
3872 mesgsys->getStringFast(_PREHASH_NameValueData, _PREHASH_NVPair, NAME_VALUE_BUF_SIZE, temp_str, i); 3874 mesgsys->getStringFast(_PREHASH_NameValueData, _PREHASH_NVPair, NAME_VALUE_BUF_SIZE, temp_str, i);
3873 llinfos << "Added to object Name Value: " << temp_str << llendl; 3875 LL_INFOS("Messaging") << "Added to object Name Value: " << temp_str << LL_ENDL;
3874 object->addNVPair(temp_str); 3876 object->addNVPair(temp_str);
3875 } 3877 }
3876 } 3878 }
3877 else 3879 else
3878 { 3880 {
3879 llinfos << "Can't find object " << id << " to add name value pair" << llendl; 3881 LL_INFOS("Messaging") << "Can't find object " << id << " to add name value pair" << LL_ENDL;
3880 } 3882 }
3881} 3883}
3882 3884
@@ -3896,13 +3898,13 @@ void process_remove_name_value(LLMessageSystem *mesgsys, void **user_data)
3896 for (i = 0; i < num_blocks; i++) 3898 for (i = 0; i < num_blocks; i++)
3897 { 3899 {
3898 mesgsys->getStringFast(_PREHASH_NameValueData, _PREHASH_NVPair, NAME_VALUE_BUF_SIZE, temp_str, i); 3900 mesgsys->getStringFast(_PREHASH_NameValueData, _PREHASH_NVPair, NAME_VALUE_BUF_SIZE, temp_str, i);
3899 llinfos << "Removed from object Name Value: " << temp_str << llendl; 3901 LL_INFOS("Messaging") << "Removed from object Name Value: " << temp_str << LL_ENDL;
3900 object->removeNVPair(temp_str); 3902 object->removeNVPair(temp_str);
3901 } 3903 }
3902 } 3904 }
3903 else 3905 else
3904 { 3906 {
3905 llinfos << "Can't find object " << id << " to remove name value pair" << llendl; 3907 LL_INFOS("Messaging") << "Can't find object " << id << " to remove name value pair" << LL_ENDL;
3906 } 3908 }
3907} 3909}
3908 3910
@@ -3982,8 +3984,8 @@ void process_money_balance_reply( LLMessageSystem* msg, void** )
3982 msg->getS32("MoneyData", "SquareMetersCredit", credit); 3984 msg->getS32("MoneyData", "SquareMetersCredit", credit);
3983 msg->getS32("MoneyData", "SquareMetersCommitted", committed); 3985 msg->getS32("MoneyData", "SquareMetersCommitted", committed);
3984 msg->getStringFast(_PREHASH_MoneyData, _PREHASH_Description, STD_STRING_BUF_SIZE, desc); 3986 msg->getStringFast(_PREHASH_MoneyData, _PREHASH_Description, STD_STRING_BUF_SIZE, desc);
3985 llinfos << "L$, credit, committed: " << balance << " " << credit << " " 3987 LL_INFOS("Messaging") << "L$, credit, committed: " << balance << " " << credit << " "
3986 << committed << llendl; 3988 << committed << LL_ENDL;
3987 3989
3988 if (gStatusBar) 3990 if (gStatusBar)
3989 { 3991 {
@@ -4027,10 +4029,10 @@ void process_money_balance_reply( LLMessageSystem* msg, void** )
4027 const S32 POP_FRONT_SIZE = 12; 4029 const S32 POP_FRONT_SIZE = 12;
4028 if(recent.size() > MAX_LOOKBACK) 4030 if(recent.size() > MAX_LOOKBACK)
4029 { 4031 {
4030 lldebugs << "Removing oldest transaction records" << llendl; 4032 LL_DEBUGS("Messaging") << "Removing oldest transaction records" << LL_ENDL;
4031 recent.erase(recent.begin(), recent.begin() + POP_FRONT_SIZE); 4033 recent.erase(recent.begin(), recent.begin() + POP_FRONT_SIZE);
4032 } 4034 }
4033 //lldebugs << "Pushing back transaction " << tid << llendl; 4035 //LL_DEBUGS("Messaging") << "Pushing back transaction " << tid << LL_ENDL;
4034 recent.push_back(tid); 4036 recent.push_back(tid);
4035 } 4037 }
4036} 4038}
@@ -4475,9 +4477,9 @@ void process_script_question(LLMessageSystem *msg, void **user_data)
4475 switch (question_throttle.noteAction(throttle_owner_name)) 4477 switch (question_throttle.noteAction(throttle_owner_name))
4476 { 4478 {
4477 case LLStringThrottle::THROTTLE_NEWLY_BLOCKED: 4479 case LLStringThrottle::THROTTLE_NEWLY_BLOCKED:
4478 llinfos << "process_script_question throttled" 4480 LL_INFOS("Messaging") << "process_script_question throttled"
4479 << " owner_name:" << owner_name 4481 << " owner_name:" << owner_name
4480 << llendl; 4482 << LL_ENDL;
4481 // Fall through 4483 // Fall through
4482 4484
4483 case LLStringThrottle::THROTTLE_BLOCKED: 4485 case LLStringThrottle::THROTTLE_BLOCKED:
@@ -4539,7 +4541,7 @@ void process_script_question(LLMessageSystem *msg, void **user_data)
4539 4541
4540void process_derez_container(LLMessageSystem *msg, void**) 4542void process_derez_container(LLMessageSystem *msg, void**)
4541{ 4543{
4542 llwarns << "call to deprecated process_derez_container" << llendl; 4544 LL_WARNS("Messaging") << "call to deprecated process_derez_container" << LL_ENDL;
4543} 4545}
4544 4546
4545void container_inventory_arrived(LLViewerObject* object, 4547void container_inventory_arrived(LLViewerObject* object,
@@ -4547,7 +4549,7 @@ void container_inventory_arrived(LLViewerObject* object,
4547 S32 serial_num, 4549 S32 serial_num,
4548 void* data) 4550 void* data)
4549{ 4551{
4550 llinfos << "container_inventory_arrived()" << llendl; 4552 LL_DEBUGS("Messaging") << "container_inventory_arrived()" << LL_ENDL;
4551 if( gAgent.cameraMouselook() ) 4553 if( gAgent.cameraMouselook() )
4552 { 4554 {
4553 gAgent.changeCameraToDefault(); 4555 gAgent.changeCameraToDefault();
@@ -4693,7 +4695,7 @@ void process_teleport_local(LLMessageSystem *msg,void**)
4693 msg->getUUIDFast(_PREHASH_Info, _PREHASH_AgentID, agent_id); 4695 msg->getUUIDFast(_PREHASH_Info, _PREHASH_AgentID, agent_id);
4694 if (agent_id != gAgent.getID()) 4696 if (agent_id != gAgent.getID())
4695 { 4697 {
4696 llwarns << "Got teleport notification for wrong agent!" << llendl; 4698 LL_WARNS("Messaging") << "Got teleport notification for wrong agent!" << LL_ENDL;
4697 return; 4699 return;
4698 } 4700 }
4699 4701
@@ -4923,8 +4925,8 @@ void process_user_info_reply(LLMessageSystem* msg, void**)
4923 msg->getUUIDFast(_PREHASH_AgentData, _PREHASH_AgentID, agent_id); 4925 msg->getUUIDFast(_PREHASH_AgentData, _PREHASH_AgentID, agent_id);
4924 if(agent_id != gAgent.getID()) 4926 if(agent_id != gAgent.getID())
4925 { 4927 {
4926 llwarns << "process_user_info_reply - " 4928 LL_WARNS("Messaging") << "process_user_info_reply - "
4927 << "wrong agent id." << llendl; 4929 << "wrong agent id." << LL_ENDL;
4928 } 4930 }
4929 4931
4930 BOOL im_via_email; 4932 BOOL im_via_email;
@@ -5132,7 +5134,7 @@ void process_load_url(LLMessageSystem* msg, void**)
5132 if (LLMuteList::getInstance()->isMuted(infop->mObjectID, infop->mObjectName) || 5134 if (LLMuteList::getInstance()->isMuted(infop->mObjectID, infop->mObjectName) ||
5133 LLMuteList::getInstance()->isMuted(infop->mOwnerID)) 5135 LLMuteList::getInstance()->isMuted(infop->mOwnerID))
5134 { 5136 {
5135 llinfos<<"Ignoring load_url from muted object/owner."<<llendl; 5137 LL_INFOS("Messaging")<<"Ignoring load_url from muted object/owner."<<LL_ENDL;
5136 delete infop; 5138 delete infop;
5137 infop = NULL; 5139 infop = NULL;
5138 return; 5140 return;
@@ -5161,7 +5163,7 @@ void process_initiate_download(LLMessageSystem* msg, void**)
5161 msg->getUUID("AgentData", "AgentID", agent_id); 5163 msg->getUUID("AgentData", "AgentID", agent_id);
5162 if (agent_id != gAgent.getID()) 5164 if (agent_id != gAgent.getID())
5163 { 5165 {
5164 llwarns << "Initiate download for wrong agent" << llendl; 5166 LL_WARNS("Messaging") << "Initiate download for wrong agent" << LL_ENDL;
5165 return; 5167 return;
5166 } 5168 }
5167 5169
@@ -5192,10 +5194,12 @@ void process_script_teleport_request(LLMessageSystem* msg, void**)
5192 msg->getVector3("Data", "SimPosition", pos); 5194 msg->getVector3("Data", "SimPosition", pos);
5193 msg->getVector3("Data", "LookAt", look_at); 5195 msg->getVector3("Data", "LookAt", look_at);
5194 5196
5195 // gFloaterWorldMap->trackURL(sim_name, (S32)pos.mV[VX], (S32)pos.mV[VY], (S32)pos.mV[VZ]); 5197 gFloaterWorldMap->trackURL(sim_name, (S32)pos.mV[VX], (S32)pos.mV[VY], (S32)pos.mV[VZ]);
5196 // LLFloaterWorldMap::show(NULL, TRUE); 5198 LLFloaterWorldMap::show(NULL, TRUE);
5197 5199
5198 LLURLDispatcher::dispatch(LLURLDispatcher::buildSLURL(sim_name, (S32)pos.mV[VX], (S32)pos.mV[VY], (S32)pos.mV[VZ]), FALSE); 5200 // remove above two lines and replace with below line
5201 // to re-enable parcel browser for llMapDestination()
5202 // LLURLDispatcher::dispatch(LLURLDispatcher::buildSLURL(sim_name, (S32)pos.mV[VX], (S32)pos.mV[VY], (S32)pos.mV[VZ]), FALSE);
5199 5203
5200} 5204}
5201 5205
@@ -5287,7 +5291,7 @@ void onCovenantLoadComplete(LLVFS *vfs,
5287 LLAssetType::EType type, 5291 LLAssetType::EType type,
5288 void* user_data, S32 status, LLExtStat ext_status) 5292 void* user_data, S32 status, LLExtStat ext_status)
5289{ 5293{
5290 llinfos << "onCovenantLoadComplete()" << llendl; 5294 LL_DEBUGS("Messaging") << "onCovenantLoadComplete()" << LL_ENDL;
5291 std::string covenant_text; 5295 std::string covenant_text;
5292 if(0 == status) 5296 if(0 == status)
5293 { 5297 {
@@ -5298,7 +5302,7 @@ void onCovenantLoadComplete(LLVFS *vfs,
5298 char* buffer = new char[file_length+1]; 5302 char* buffer = new char[file_length+1];
5299 if (buffer == NULL) 5303 if (buffer == NULL)
5300 { 5304 {
5301 llerrs << "Memory Allocation failed" << llendl; 5305 LL_ERRS("Messaging") << "Memory Allocation failed" << LL_ENDL;
5302 return; 5306 return;
5303 } 5307 }
5304 5308
@@ -5315,7 +5319,7 @@ void onCovenantLoadComplete(LLVFS *vfs,
5315 file_length+1); 5319 file_length+1);
5316 if( !editor->importBuffer( buffer ) ) 5320 if( !editor->importBuffer( buffer ) )
5317 { 5321 {
5318 llwarns << "Problem importing estate covenant." << llendl; 5322 LL_WARNS("Messaging") << "Problem importing estate covenant." << LL_ENDL;
5319 covenant_text = "Problem importing estate covenant."; 5323 covenant_text = "Problem importing estate covenant.";
5320 } 5324 }
5321 else 5325 else
@@ -5328,7 +5332,7 @@ void onCovenantLoadComplete(LLVFS *vfs,
5328 } 5332 }
5329 else 5333 else
5330 { 5334 {
5331 llwarns << "Problem importing estate covenant: Covenant file format error." << llendl; 5335 LL_WARNS("Messaging") << "Problem importing estate covenant: Covenant file format error." << LL_ENDL;
5332 covenant_text = "Problem importing estate covenant: Covenant file format error."; 5336 covenant_text = "Problem importing estate covenant: Covenant file format error.";
5333 } 5337 }
5334 } 5338 }
@@ -5350,7 +5354,7 @@ void onCovenantLoadComplete(LLVFS *vfs,
5350 covenant_text = "Unable to load estate covenant at this time."; 5354 covenant_text = "Unable to load estate covenant at this time.";
5351 } 5355 }
5352 5356
5353 llwarns << "Problem loading notecard: " << status << llendl; 5357 LL_WARNS("Messaging") << "Problem loading notecard: " << status << LL_ENDL;
5354 } 5358 }
5355 LLPanelEstateCovenant::updateCovenantText(covenant_text, asset_uuid); 5359 LLPanelEstateCovenant::updateCovenantText(covenant_text, asset_uuid);
5356 LLPanelLandCovenant::updateCovenantText(covenant_text); 5360 LLPanelLandCovenant::updateCovenantText(covenant_text);
@@ -5368,7 +5372,7 @@ void process_feature_disabled_message(LLMessageSystem* msg, void**)
5368 msg->getUUIDFast(_PREHASH_FailureInfo,_PREHASH_AgentID,agentID); 5372 msg->getUUIDFast(_PREHASH_FailureInfo,_PREHASH_AgentID,agentID);
5369 msg->getUUIDFast(_PREHASH_FailureInfo,_PREHASH_TransactionID,transactionID); 5373 msg->getUUIDFast(_PREHASH_FailureInfo,_PREHASH_TransactionID,transactionID);
5370 5374
5371 llwarns << "Blacklisted Feature Response:" << &messageText[0] << llendl; 5375 LL_WARNS("Messaging") << "Blacklisted Feature Response:" << &messageText[0] << LL_ENDL;
5372} 5376}
5373 5377
5374// ------------------------------------------------------------ 5378// ------------------------------------------------------------
diff --git a/linden/indra/newview/llviewernetwork.cpp b/linden/indra/newview/llviewernetwork.cpp
index d6e92c2..3224c00 100644
--- a/linden/indra/newview/llviewernetwork.cpp
+++ b/linden/indra/newview/llviewernetwork.cpp
@@ -33,8 +33,17 @@
33#include "llviewerprecompiledheaders.h" 33#include "llviewerprecompiledheaders.h"
34 34
35#include "llviewernetwork.h" 35#include "llviewernetwork.h"
36#include "llviewercontrol.h"
36 37
37LLGridData gGridInfo[GRID_INFO_COUNT] = 38struct LLGridData
39{
40 const char* mLabel;
41 const char* mName;
42 const char* mLoginURI;
43 const char* mHelperURI;
44};
45
46static LLGridData gGridInfo[GRID_INFO_COUNT] =
38{ 47{
39 { "None", "", "", ""}, 48 { "None", "", "", ""},
40 { "Aditi", 49 { "Aditi",
@@ -111,8 +120,177 @@ LLGridData gGridInfo[GRID_INFO_COUNT] =
111 "" } 120 "" }
112}; 121};
113 122
114// Use this to figure out which domain name and login URI to use. 123#if LL_RELEASE_FOR_DOWNLOAD
124 // Default userserver for production builds is agni
125 const EGridInfo DEFAULT_GRID_CHOICE = GRID_INFO_AGNI;
126#else
127 // Default userserver for development builds is none
128 const EGridInfo DEFAULT_GRID_CHOICE = GRID_INFO_NONE;
129#endif
115 130
116EGridInfo gGridChoice = GRID_INFO_NONE;
117LLString gGridName; /* Flawfinder: ignore */
118unsigned char gMACAddress[MAC_ADDRESS_BYTES]; /* Flawfinder: ignore */ 131unsigned char gMACAddress[MAC_ADDRESS_BYTES]; /* Flawfinder: ignore */
132
133LLViewerLogin::LLViewerLogin() :
134 mGridChoice(DEFAULT_GRID_CHOICE)
135{
136}
137
138void LLViewerLogin::setGridChoice(EGridInfo grid)
139{
140 if(grid < 0 || grid >= GRID_INFO_COUNT)
141 {
142 llerrs << "Invalid grid index specified." << llendl;
143 }
144
145 if(mGridChoice != grid)
146 {
147 mGridChoice = grid;
148 if(GRID_INFO_LOCAL == mGridChoice)
149 {
150 mGridName = LOOPBACK_ADDRESS_STRING;
151 }
152 else if(GRID_INFO_OTHER == mGridChoice)
153 {
154 // *FIX:Mani - could this possibly be valid?
155 mGridName = "other";
156 }
157 else
158 {
159 mGridName = gGridInfo[mGridChoice].mLabel;
160 }
161
162 gSavedSettings.setS32("ServerChoice", mGridChoice);
163 gSavedSettings.setString("CustomServer", "");
164 }
165}
166
167void LLViewerLogin::setGridChoice(const std::string& grid_name)
168{
169 // Set the grid choice based on a string.
170 // The string can be:
171 // - a grid label from the gGridInfo table
172 // - an ip address
173 if(!grid_name.empty())
174 {
175 // find the grid choice from the user setting.
176 int grid_index = GRID_INFO_NONE;
177 for(;grid_index < GRID_INFO_OTHER; ++grid_index)
178 {
179 if(0 == LLString::compareInsensitive(gGridInfo[grid_index].mLabel, grid_name.c_str()))
180 {
181 // Founding a matching label in the list...
182 setGridChoice((EGridInfo)grid_index);
183 break;
184 }
185 }
186
187 if(GRID_INFO_OTHER == grid_index)
188 {
189 // *FIX:MEP Can and should we validate that this is an IP address?
190 mGridChoice = GRID_INFO_OTHER;
191 mGridName = grid_name;
192 gSavedSettings.setS32("ServerChoice", mGridChoice);
193 gSavedSettings.setString("CustomServer", mGridName);
194 }
195 }
196}
197
198void LLViewerLogin::resetURIs()
199{
200 // Clear URIs when picking a new server
201 gSavedSettings.setValue("CmdLineLoginURI", LLSD::emptyArray());
202 gSavedSettings.setString("CmdLineHelperURI", "");
203}
204
205EGridInfo LLViewerLogin::getGridChoice() const
206{
207 return mGridChoice;
208}
209
210std::string LLViewerLogin::getGridLabel() const
211{
212 if(mGridChoice == GRID_INFO_NONE)
213 {
214 return "None";
215 }
216 else if(mGridChoice < GRID_INFO_OTHER)
217 {
218 return gGridInfo[mGridChoice].mLabel;
219 }
220
221 return mGridName;
222}
223
224std::string LLViewerLogin::getKnownGridLabel(EGridInfo grid_index) const
225{
226 if(grid_index > GRID_INFO_NONE && grid_index < GRID_INFO_OTHER)
227 {
228 return gGridInfo[grid_index].mLabel;
229 }
230 return gGridInfo[GRID_INFO_NONE].mLabel;
231}
232
233void LLViewerLogin::getLoginURIs(std::vector<std::string>& uris) const
234{
235 // return the login uri set on the command line.
236 LLControlVariable* c = gSavedSettings.getControl("CmdLineLoginURI");
237 if(c)
238 {
239 LLSD v = c->getValue();
240 if(v.isArray())
241 {
242 for(LLSD::array_const_iterator itr = v.beginArray();
243 itr != v.endArray(); ++itr)
244 {
245 std::string uri = itr->asString();
246 if(!uri.empty())
247 {
248 uris.push_back(uri);
249 }
250 }
251 }
252 else
253 {
254 std::string uri = v.asString();
255 if(!uri.empty())
256 {
257 uris.push_back(uri);
258 }
259 }
260 }
261
262 // If there was no command line uri...
263 if(uris.empty())
264 {
265 // If its a known grid choice, get the uri from the table,
266 // else try the grid name.
267 if(mGridChoice > GRID_INFO_NONE && mGridChoice < GRID_INFO_OTHER)
268 {
269 uris.push_back(gGridInfo[mGridChoice].mLoginURI);
270 }
271 else
272 {
273 uris.push_back(mGridName);
274 }
275 }
276}
277
278std::string LLViewerLogin::getHelperURI() const
279{
280 return gSavedSettings.getString("CmdLineHelperURI");
281}
282
283bool LLViewerLogin::isInProductionGrid()
284{
285 // *NOTE:Mani This used to compare GRID_INFO_AGNI to gGridChoice,
286 // but it seems that loginURI trumps that.
287 std::vector<std::string> uris;
288 getLoginURIs(uris);
289 LLString::toLower(uris[0]);
290 if((uris[0].find("agni") != std::string::npos))
291 {
292 return true;
293 }
294
295 return false;
296}
diff --git a/linden/indra/newview/llviewernetwork.h b/linden/indra/newview/llviewernetwork.h
index 176ce43..966034f 100644
--- a/linden/indra/newview/llviewernetwork.h
+++ b/linden/indra/newview/llviewernetwork.h
@@ -59,18 +59,44 @@ enum EGridInfo
59 GRID_INFO_COUNT 59 GRID_INFO_COUNT
60}; 60};
61 61
62 62/**
63struct LLGridData 63 * @brief A class to manage the viewer's login state.
64 *
65 **/
66class LLViewerLogin : public LLSingleton<LLViewerLogin>
64{ 67{
65 const char* mLabel; 68public:
66 const char* mName; 69 LLViewerLogin();
67 const char* mLoginURI; 70
68 const char* mHelperURI; 71 void setGridChoice(EGridInfo grid);
69}; 72 void setGridChoice(const std::string& grid_name);
73 void resetURIs();
74
75 /**
76 * @brief Get the enumeration of the grid choice.
77 * Should only return values > 0 && < GRID_INFO_COUNT
78 **/
79 EGridInfo getGridChoice() const;
70 80
71extern EGridInfo gGridChoice; 81 /**
72extern LLGridData gGridInfo[]; 82 * @brief Get a readable label for the grid choice.
73extern LLString gGridName; /* Flawfinder: ignore */ 83 * Returns the readable name for the grid choice.
84 * If the grid is 'other', returns something
85 * the string used to specifiy the grid.
86 **/
87 std::string getGridLabel() const;
88
89 std::string getKnownGridLabel(EGridInfo grid_index) const;
90
91 void getLoginURIs(std::vector<std::string>& uris) const;
92 std::string getHelperURI() const;
93
94 bool isInProductionGrid();
95
96private:
97 EGridInfo mGridChoice;
98 std::string mGridName;
99};
74 100
75const S32 MAC_ADDRESS_BYTES = 6; 101const S32 MAC_ADDRESS_BYTES = 6;
76extern unsigned char gMACAddress[MAC_ADDRESS_BYTES]; /* Flawfinder: ignore */ 102extern unsigned char gMACAddress[MAC_ADDRESS_BYTES]; /* Flawfinder: ignore */
diff --git a/linden/indra/newview/llviewerobject.cpp b/linden/indra/newview/llviewerobject.cpp
index b0bd5ce..54114e4 100644
--- a/linden/indra/newview/llviewerobject.cpp
+++ b/linden/indra/newview/llviewerobject.cpp
@@ -94,7 +94,7 @@
94#include "llworld.h" 94#include "llworld.h"
95#include "llui.h" 95#include "llui.h"
96#include "pipeline.h" 96#include "pipeline.h"
97#include "llappviewer.h" 97#include "llviewernetwork.h"
98#include "llvowlsky.h" 98#include "llvowlsky.h"
99 99
100//#define DEBUG_UPDATE_TYPE 100//#define DEBUG_UPDATE_TYPE
@@ -4073,6 +4073,37 @@ BOOL LLViewerObject::isParticleSource() const
4073 return !mPartSourcep.isNull() && !mPartSourcep->isDead(); 4073 return !mPartSourcep.isNull() && !mPartSourcep->isDead();
4074} 4074}
4075 4075
4076void LLViewerObject::setParticleSource(const LLPartSysData& particle_parameters, const LLUUID& owner_id)
4077{
4078 if (mPartSourcep)
4079 {
4080 deleteParticleSource();
4081 }
4082
4083 LLPointer<LLViewerPartSourceScript> pss = LLViewerPartSourceScript::createPSS(this, particle_parameters);
4084 mPartSourcep = pss;
4085
4086 if (mPartSourcep)
4087 {
4088 mPartSourcep->setOwnerUUID(owner_id);
4089
4090 if (mPartSourcep->getImage()->getID() != mPartSourcep->mPartSysData.mPartImageID)
4091 {
4092 LLViewerImage* image;
4093 if (mPartSourcep->mPartSysData.mPartImageID == LLUUID::null)
4094 {
4095 image = gImageList.getImageFromFile("pixiesmall.tga");
4096 }
4097 else
4098 {
4099 image = gImageList.getImage(mPartSourcep->mPartSysData.mPartImageID);
4100 }
4101 mPartSourcep->setImage(image);
4102 }
4103 }
4104 LLViewerPartSim::getInstance()->addPartSource(pss);
4105}
4106
4076void LLViewerObject::unpackParticleSource(const S32 block_num, const LLUUID& owner_id) 4107void LLViewerObject::unpackParticleSource(const S32 block_num, const LLUUID& owner_id)
4077{ 4108{
4078 if (!mPartSourcep.isNull() && mPartSourcep->isDead()) 4109 if (!mPartSourcep.isNull() && mPartSourcep->isDead())
@@ -4539,7 +4570,7 @@ BOOL LLViewerObject::permYouOwner() const
4539 return TRUE; 4570 return TRUE;
4540#else 4571#else
4541# ifdef TOGGLE_HACKED_GODLIKE_VIEWER 4572# ifdef TOGGLE_HACKED_GODLIKE_VIEWER
4542 if (!LLAppViewer::instance()->isInProductionGrid() 4573 if (!LLViewerLogin::getInstance()->isInProductionGrid()
4543 && (gAgent.getGodLevel() >= GOD_MAINTENANCE)) 4574 && (gAgent.getGodLevel() >= GOD_MAINTENANCE))
4544 { 4575 {
4545 return TRUE; 4576 return TRUE;
@@ -4576,7 +4607,7 @@ BOOL LLViewerObject::permOwnerModify() const
4576 return TRUE; 4607 return TRUE;
4577#else 4608#else
4578# ifdef TOGGLE_HACKED_GODLIKE_VIEWER 4609# ifdef TOGGLE_HACKED_GODLIKE_VIEWER
4579 if (!LLAppViewer::instance()->isInProductionGrid() 4610 if (!LLViewerLogin::getInstance()->isInProductionGrid()
4580 && (gAgent.getGodLevel() >= GOD_MAINTENANCE)) 4611 && (gAgent.getGodLevel() >= GOD_MAINTENANCE))
4581 { 4612 {
4582 return TRUE; 4613 return TRUE;
@@ -4600,7 +4631,7 @@ BOOL LLViewerObject::permModify() const
4600 return TRUE; 4631 return TRUE;
4601#else 4632#else
4602# ifdef TOGGLE_HACKED_GODLIKE_VIEWER 4633# ifdef TOGGLE_HACKED_GODLIKE_VIEWER
4603 if (!LLAppViewer::instance()->isInProductionGrid() 4634 if (!LLViewerLogin::getInstance()->isInProductionGrid()
4604 && (gAgent.getGodLevel() >= GOD_MAINTENANCE)) 4635 && (gAgent.getGodLevel() >= GOD_MAINTENANCE))
4605 { 4636 {
4606 return TRUE; 4637 return TRUE;
@@ -4624,7 +4655,7 @@ BOOL LLViewerObject::permCopy() const
4624 return TRUE; 4655 return TRUE;
4625#else 4656#else
4626# ifdef TOGGLE_HACKED_GODLIKE_VIEWER 4657# ifdef TOGGLE_HACKED_GODLIKE_VIEWER
4627 if (!LLAppViewer::instance()->isInProductionGrid() 4658 if (!LLViewerLogin::getInstance()->isInProductionGrid()
4628 && (gAgent.getGodLevel() >= GOD_MAINTENANCE)) 4659 && (gAgent.getGodLevel() >= GOD_MAINTENANCE))
4629 { 4660 {
4630 return TRUE; 4661 return TRUE;
@@ -4648,7 +4679,7 @@ BOOL LLViewerObject::permMove() const
4648 return TRUE; 4679 return TRUE;
4649#else 4680#else
4650# ifdef TOGGLE_HACKED_GODLIKE_VIEWER 4681# ifdef TOGGLE_HACKED_GODLIKE_VIEWER
4651 if (!LLAppViewer::instance()->isInProductionGrid() 4682 if (!LLViewerLogin::getInstance()->isInProductionGrid()
4652 && (gAgent.getGodLevel() >= GOD_MAINTENANCE)) 4683 && (gAgent.getGodLevel() >= GOD_MAINTENANCE))
4653 { 4684 {
4654 return TRUE; 4685 return TRUE;
@@ -4672,7 +4703,7 @@ BOOL LLViewerObject::permTransfer() const
4672 return TRUE; 4703 return TRUE;
4673#else 4704#else
4674# ifdef TOGGLE_HACKED_GODLIKE_VIEWER 4705# ifdef TOGGLE_HACKED_GODLIKE_VIEWER
4675 if (!LLAppViewer::instance()->isInProductionGrid() 4706 if (!LLViewerLogin::getInstance()->isInProductionGrid()
4676 && (gAgent.getGodLevel() >= GOD_MAINTENANCE)) 4707 && (gAgent.getGodLevel() >= GOD_MAINTENANCE))
4677 { 4708 {
4678 return TRUE; 4709 return TRUE;
diff --git a/linden/indra/newview/llviewerobject.h b/linden/indra/newview/llviewerobject.h
index 316e8db..88e2a15 100644
--- a/linden/indra/newview/llviewerobject.h
+++ b/linden/indra/newview/llviewerobject.h
@@ -558,6 +558,7 @@ protected:
558 void unpackParticleSource(const S32 block_num, const LLUUID& owner_id); 558 void unpackParticleSource(const S32 block_num, const LLUUID& owner_id);
559 void unpackParticleSource(LLDataPacker &dp, const LLUUID& owner_id); 559 void unpackParticleSource(LLDataPacker &dp, const LLUUID& owner_id);
560 void deleteParticleSource(); 560 void deleteParticleSource();
561 void setParticleSource(const LLPartSysData& particle_parameters, const LLUUID& owner_id);
561 562
562private: 563private:
563 void setNameValueList(const std::string& list); // clears nv pairs and then individually adds \n separated NV pairs from \0 terminated string 564 void setNameValueList(const std::string& list); // clears nv pairs and then individually adds \n separated NV pairs from \0 terminated string
diff --git a/linden/indra/newview/llviewerobjectlist.cpp b/linden/indra/newview/llviewerobjectlist.cpp
index 03567b0..bd8ed97 100644
--- a/linden/indra/newview/llviewerobjectlist.cpp
+++ b/linden/indra/newview/llviewerobjectlist.cpp
@@ -36,7 +36,7 @@
36#include "message.h" 36#include "message.h"
37#include "timing.h" 37#include "timing.h"
38#include "llfasttimer.h" 38#include "llfasttimer.h"
39#include "llglimmediate.h" 39#include "llrender.h"
40 40
41#include "llviewercontrol.h" 41#include "llviewercontrol.h"
42#include "llface.h" 42#include "llface.h"
@@ -1212,6 +1212,7 @@ U32 LLViewerObjectList::renderObjectsForSelect(LLCamera &camera, BOOL pick_parce
1212 // render pickable ui elements, like names, etc. 1212 // render pickable ui elements, like names, etc.
1213 LLHUDObject::renderAllForSelect(); 1213 LLHUDObject::renderAllForSelect();
1214 gGL.flush(); 1214 gGL.flush();
1215 LLVertexBuffer::unbind();
1215 1216
1216 gRenderForSelect = FALSE; 1217 gRenderForSelect = FALSE;
1217 1218
diff --git a/linden/indra/newview/llviewerparcelmedia.cpp b/linden/indra/newview/llviewerparcelmedia.cpp
index 187a553..c29f277 100644
--- a/linden/indra/newview/llviewerparcelmedia.cpp
+++ b/linden/indra/newview/llviewerparcelmedia.cpp
@@ -100,9 +100,17 @@ void LLViewerParcelMedia::update(LLParcel* parcel)
100 // we have a player 100 // we have a player
101 if (parcel) 101 if (parcel)
102 { 102 {
103 if(!gAgent.getRegion())
104 {
105 sMediaRegionID = LLUUID() ;
106 stop() ;
107 return ;
108 }
109
103 // we're in a parcel 110 // we're in a parcel
104 bool new_parcel = false; 111 bool new_parcel = false;
105 S32 parcelid = parcel->getLocalID(); 112 S32 parcelid = parcel->getLocalID();
113
106 LLUUID regionid = gAgent.getRegion()->getRegionID(); 114 LLUUID regionid = gAgent.getRegion()->getRegionID();
107 if (parcelid != sMediaParcelLocalID || regionid != sMediaRegionID) 115 if (parcelid != sMediaParcelLocalID || regionid != sMediaRegionID)
108 { 116 {
diff --git a/linden/indra/newview/llviewerparceloverlay.cpp b/linden/indra/newview/llviewerparceloverlay.cpp
index 7d0b2b4..b50ddb6 100644
--- a/linden/indra/newview/llviewerparceloverlay.cpp
+++ b/linden/indra/newview/llviewerparceloverlay.cpp
@@ -36,7 +36,7 @@
36// indra includes 36// indra includes
37#include "llparcel.h" 37#include "llparcel.h"
38#include "llgl.h" 38#include "llgl.h"
39#include "llglimmediate.h" 39#include "llrender.h"
40#include "v4color.h" 40#include "v4color.h"
41#include "v2math.h" 41#include "v2math.h"
42 42
@@ -48,6 +48,8 @@
48#include "llagent.h" 48#include "llagent.h"
49#include "llviewercamera.h" 49#include "llviewercamera.h"
50#include "llviewerimagelist.h" 50#include "llviewerimagelist.h"
51#include "llselectmgr.h"
52#include "llfloatertools.h"
51#include "llglheaders.h" 53#include "llglheaders.h"
52 54
53const U8 OVERLAY_IMG_COMPONENTS = 4; 55const U8 OVERLAY_IMG_COMPONENTS = 4;
@@ -69,7 +71,7 @@ LLViewerParcelOverlay::LLViewerParcelOverlay(LLViewerRegion* region, F32 region_
69 mTexture = new LLImageGL(FALSE); 71 mTexture = new LLImageGL(FALSE);
70 mImageRaw = new LLImageRaw(mParcelGridsPerEdge, mParcelGridsPerEdge, OVERLAY_IMG_COMPONENTS); 72 mImageRaw = new LLImageRaw(mParcelGridsPerEdge, mParcelGridsPerEdge, OVERLAY_IMG_COMPONENTS);
71 mTexture->createGLTexture(0, mImageRaw); 73 mTexture->createGLTexture(0, mImageRaw);
72 glActiveTextureARB(GL_TEXTURE0_ARB); 74 gGL.getTexUnit(0)->activate();
73 mTexture->bind(0); 75 mTexture->bind(0);
74 mTexture->setClamp(TRUE, TRUE); 76 mTexture->setClamp(TRUE, TRUE);
75 mTexture->setMipFilterNearest(TRUE); 77 mTexture->setMipFilterNearest(TRUE);
@@ -839,31 +841,34 @@ S32 LLViewerParcelOverlay::renderPropertyLines ()
839 841
840 gGL.end(); 842 gGL.end();
841 843
842 LLGLDepthTest depth(GL_TRUE, GL_FALSE, GL_GREATER); 844 if (LLSelectMgr::sRenderHiddenSelections && gFloaterTools && gFloaterTools->getVisible())
843 845 {
844 colorp = mColorArray + BYTES_PER_COLOR * i; 846 LLGLDepthTest depth(GL_TRUE, GL_FALSE, GL_GREATER);
845 vertexp = mVertexArray + FLOATS_PER_VERTEX * i; 847
848 colorp = mColorArray + BYTES_PER_COLOR * i;
849 vertexp = mVertexArray + FLOATS_PER_VERTEX * i;
846 850
847 gGL.begin(LLVertexBuffer::TRIANGLE_STRIP); 851 gGL.begin(LLVertexBuffer::TRIANGLE_STRIP);
848 852
849 for (j = 0; j < vertex_per_edge; j++) 853 for (j = 0; j < vertex_per_edge; j++)
850 { 854 {
851 U8 color[4]; 855 U8 color[4];
852 color[0] = colorp[0]; 856 color[0] = colorp[0];
853 color[1] = colorp[1]; 857 color[1] = colorp[1];
854 color[2] = colorp[2]; 858 color[2] = colorp[2];
855 color[3] = colorp[3]/4; 859 color[3] = colorp[3]/4;
856 860
857 gGL.color4ubv(color); 861 gGL.color4ubv(color);
858 gGL.vertex3fv(vertexp); 862 gGL.vertex3fv(vertexp);
859 863
860 colorp += BYTES_PER_COLOR; 864 colorp += BYTES_PER_COLOR;
861 vertexp += FLOATS_PER_VERTEX; 865 vertexp += FLOATS_PER_VERTEX;
862 } 866 }
863 867
864 drawn += vertex_per_edge; 868 drawn += vertex_per_edge;
865 869
866 gGL.end(); 870 gGL.end();
871 }
867 872
868 } 873 }
869 874
diff --git a/linden/indra/newview/llviewerpartsource.cpp b/linden/indra/newview/llviewerpartsource.cpp
index 040d108..6c0596a 100644
--- a/linden/indra/newview/llviewerpartsource.cpp
+++ b/linden/indra/newview/llviewerpartsource.cpp
@@ -466,6 +466,25 @@ LLPointer<LLViewerPartSourceScript> LLViewerPartSourceScript::unpackPSS(LLViewer
466 } 466 }
467} 467}
468 468
469
470/* static */
471LLPointer<LLViewerPartSourceScript> LLViewerPartSourceScript::createPSS(LLViewerObject *source_objp, const LLPartSysData& particle_parameters)
472{
473 LLMemType mt(LLMemType::MTYPE_PARTICLES);
474
475 LLPointer<LLViewerPartSourceScript> new_pssp = new LLViewerPartSourceScript(source_objp);
476
477 new_pssp->mPartSysData = particle_parameters;
478
479 if (new_pssp->mPartSysData.mTargetUUID.notNull())
480 {
481 LLViewerObject *target_objp = gObjectList.findObject(new_pssp->mPartSysData.mTargetUUID);
482 new_pssp->setTargetObject(target_objp);
483 }
484 return new_pssp;
485}
486
487
469void LLViewerPartSourceScript::setImage(LLViewerImage *imagep) 488void LLViewerPartSourceScript::setImage(LLViewerImage *imagep)
470{ 489{
471 LLMemType mt(LLMemType::MTYPE_PARTICLES); 490 LLMemType mt(LLMemType::MTYPE_PARTICLES);
diff --git a/linden/indra/newview/llviewerpartsource.h b/linden/indra/newview/llviewerpartsource.h
index cda81a0..8b6fb2c 100644
--- a/linden/indra/newview/llviewerpartsource.h
+++ b/linden/indra/newview/llviewerpartsource.h
@@ -119,6 +119,7 @@ public:
119 // Returns a new particle source to attach to an object... 119 // Returns a new particle source to attach to an object...
120 static LLPointer<LLViewerPartSourceScript> unpackPSS(LLViewerObject *source_objp, LLPointer<LLViewerPartSourceScript> pssp, const S32 block_num); 120 static LLPointer<LLViewerPartSourceScript> unpackPSS(LLViewerObject *source_objp, LLPointer<LLViewerPartSourceScript> pssp, const S32 block_num);
121 static LLPointer<LLViewerPartSourceScript> unpackPSS(LLViewerObject *source_objp, LLPointer<LLViewerPartSourceScript> pssp, LLDataPacker &dp); 121 static LLPointer<LLViewerPartSourceScript> unpackPSS(LLViewerObject *source_objp, LLPointer<LLViewerPartSourceScript> pssp, LLDataPacker &dp);
122 static LLPointer<LLViewerPartSourceScript> createPSS(LLViewerObject *source_objp, const LLPartSysData& particle_parameters);
122 123
123 LLViewerImage *getImage() const { return mImagep; } 124 LLViewerImage *getImage() const { return mImagep; }
124 void setImage(LLViewerImage *imagep); 125 void setImage(LLViewerImage *imagep);
diff --git a/linden/indra/newview/llviewerregion.cpp b/linden/indra/newview/llviewerregion.cpp
index e8ed85f..e1590cc 100644
--- a/linden/indra/newview/llviewerregion.cpp
+++ b/linden/indra/newview/llviewerregion.cpp
@@ -214,7 +214,7 @@ void LLViewerRegion::loadCache()
214 U32(mHandle>>32)/REGION_WIDTH_UNITS, 214 U32(mHandle>>32)/REGION_WIDTH_UNITS,
215 U32(mHandle)/REGION_WIDTH_UNITS ); 215 U32(mHandle)/REGION_WIDTH_UNITS );
216 216
217 FILE* fp = LLFile::fopen(filename, "rb"); /* Flawfinder: ignore */ 217 LLFILE* fp = LLFile::fopen(filename, "rb"); /* Flawfinder: ignore */
218 if (!fp) 218 if (!fp)
219 { 219 {
220 // might not have a file, which is normal 220 // might not have a file, which is normal
@@ -303,7 +303,7 @@ void LLViewerRegion::saveCache()
303 U32(mHandle>>32)/REGION_WIDTH_UNITS, 303 U32(mHandle>>32)/REGION_WIDTH_UNITS,
304 U32(mHandle)/REGION_WIDTH_UNITS ); 304 U32(mHandle)/REGION_WIDTH_UNITS );
305 305
306 FILE* fp = LLFile::fopen(filename, "wb"); /* Flawfinder: ignore */ 306 LLFILE* fp = LLFile::fopen(filename, "wb"); /* Flawfinder: ignore */
307 if (!fp) 307 if (!fp)
308 { 308 {
309 llwarns << "Unable to write cache file " << filename << llendl; 309 llwarns << "Unable to write cache file " << filename << llendl;
@@ -1307,6 +1307,7 @@ void LLViewerRegion::unpackRegionHandshake()
1307 1307
1308class BaseCapabilitiesComplete : public LLHTTPClient::Responder 1308class BaseCapabilitiesComplete : public LLHTTPClient::Responder
1309{ 1309{
1310 LOG_CLASS(BaseCapabilitiesComplete);
1310public: 1311public:
1311 BaseCapabilitiesComplete(LLViewerRegion* region) 1312 BaseCapabilitiesComplete(LLViewerRegion* region)
1312 : mRegion(region) 1313 : mRegion(region)
@@ -1314,8 +1315,7 @@ public:
1314 1315
1315 void error(U32 statusNum, const std::string& reason) 1316 void error(U32 statusNum, const std::string& reason)
1316 { 1317 {
1317 llinfos << "BaseCapabilitiesComplete::error " 1318 LL_WARNS2("AppInit", "Capabilities") << statusNum << ": " << reason << LL_ENDL;
1318 << statusNum << ": " << reason << llendl;
1319 1319
1320 if (STATE_SEED_GRANTED_WAIT == LLStartUp::getStartupState()) 1320 if (STATE_SEED_GRANTED_WAIT == LLStartUp::getStartupState())
1321 { 1321 {
@@ -1329,8 +1329,8 @@ public:
1329 for(iter = content.beginMap(); iter != content.endMap(); ++iter) 1329 for(iter = content.beginMap(); iter != content.endMap(); ++iter)
1330 { 1330 {
1331 mRegion->setCapability(iter->first, iter->second); 1331 mRegion->setCapability(iter->first, iter->second);
1332 llinfos << "BaseCapabilitiesComplete::result got capability for " 1332 LL_DEBUGS2("AppInit", "Capabilities") << "got capability for "
1333 << iter->first << llendl; 1333 << iter->first << LL_ENDL;
1334 1334
1335 /* HACK we're waiting for the ServerReleaseNotes */ 1335 /* HACK we're waiting for the ServerReleaseNotes */
1336 if ((iter->first == "ServerReleaseNotes") && (LLFloaterReleaseMsg::sDisplayMessage)) 1336 if ((iter->first == "ServerReleaseNotes") && (LLFloaterReleaseMsg::sDisplayMessage))
diff --git a/linden/indra/newview/llviewerstats.cpp b/linden/indra/newview/llviewerstats.cpp
index 9f10bbf..52b6748 100644
--- a/linden/indra/newview/llviewerstats.cpp
+++ b/linden/indra/newview/llviewerstats.cpp
@@ -53,6 +53,7 @@
53#include "llfasttimerview.h" 53#include "llfasttimerview.h"
54#include "llviewerregion.h" 54#include "llviewerregion.h"
55#include "llfloaterhtml.h" 55#include "llfloaterhtml.h"
56#include "llviewerwindow.h" // *TODO: remove, only used for width/height
56#include "llworld.h" 57#include "llworld.h"
57#include "llfeaturemanager.h" 58#include "llfeaturemanager.h"
58#if LL_WINDOWS && LL_LCD_COMPILE 59#if LL_WINDOWS && LL_LCD_COMPILE
@@ -748,7 +749,12 @@ void send_stats()
748 // If the current revision is recent, ping the previous author before overriding 749 // If the current revision is recent, ping the previous author before overriding
749 LLSD &misc = body["stats"]["misc"]; 750 LLSD &misc = body["stats"]["misc"];
750 751
751 // misc["string_1"] = 752 // Screen size so the UI team can figure out how big the widgets
753 // appear and use a "typical" size for end user tests.
754
755 S32 window_width = gViewerWindow->getWindowDisplayWidth();
756 S32 window_height = gViewerWindow->getWindowDisplayHeight();
757 misc["string_1"] = llformat("%.dx%d", window_width, window_height);
752 // misc["string_2"] = 758 // misc["string_2"] =
753 misc["int_1"] = LLFloaterDirectory::sOldSearchCount; // Steve: 1.18.6 759 misc["int_1"] = LLFloaterDirectory::sOldSearchCount; // Steve: 1.18.6
754 misc["int_2"] = LLFloaterDirectory::sNewSearchCount; // Steve: 1.18.6 760 misc["int_2"] = LLFloaterDirectory::sNewSearchCount; // Steve: 1.18.6
diff --git a/linden/indra/newview/llviewertexteditor.cpp b/linden/indra/newview/llviewertexteditor.cpp
index 60ec187..e1c56a6 100644
--- a/linden/indra/newview/llviewertexteditor.cpp
+++ b/linden/indra/newview/llviewertexteditor.cpp
@@ -631,7 +631,7 @@ BOOL LLViewerTextEditor::handleToolTip(S32 x, S32 y, LLString& msg, LLRect* stic
631 if( cur_segment ) 631 if( cur_segment )
632 { 632 {
633 BOOL has_tool_tip = FALSE; 633 BOOL has_tool_tip = FALSE;
634 if( cur_segment->getStyle().getIsEmbeddedItem() ) 634 if( cur_segment->getStyle()->getIsEmbeddedItem() )
635 { 635 {
636 LLWString wtip; 636 LLWString wtip;
637 has_tool_tip = getEmbeddedItemToolTipAtPos(cur_segment->getStart(), wtip); 637 has_tool_tip = getEmbeddedItemToolTipAtPos(cur_segment->getStart(), wtip);
@@ -851,14 +851,14 @@ BOOL LLViewerTextEditor::handleHover(S32 x, S32 y, MASK mask)
851 const LLTextSegment* cur_segment = getSegmentAtLocalPos( x, y ); 851 const LLTextSegment* cur_segment = getSegmentAtLocalPos( x, y );
852 if( cur_segment ) 852 if( cur_segment )
853 { 853 {
854 if(cur_segment->getStyle().isLink()) 854 if(cur_segment->getStyle()->isLink())
855 { 855 {
856 lldebugst(LLERR_USER_INPUT) << "hover handled by " << getName() << " (over link, inactive)" << llendl; 856 lldebugst(LLERR_USER_INPUT) << "hover handled by " << getName() << " (over link, inactive)" << llendl;
857 getWindow()->setCursor(UI_CURSOR_HAND); 857 getWindow()->setCursor(UI_CURSOR_HAND);
858 handled = TRUE; 858 handled = TRUE;
859 } 859 }
860 else 860 else
861 if(cur_segment->getStyle().getIsEmbeddedItem()) 861 if(cur_segment->getStyle()->getIsEmbeddedItem())
862 { 862 {
863 lldebugst(LLERR_USER_INPUT) << "hover handled by " << getName() << " (over embedded item, inactive)" << llendl; 863 lldebugst(LLERR_USER_INPUT) << "hover handled by " << getName() << " (over embedded item, inactive)" << llendl;
864 getWindow()->setCursor(UI_CURSOR_HAND); 864 getWindow()->setCursor(UI_CURSOR_HAND);
@@ -970,10 +970,10 @@ BOOL LLViewerTextEditor::handleRightMouseDown(S32 x, S32 y, MASK mask)
970// const LLTextSegment* cur_segment = getSegmentAtLocalPos( x, y ); 970// const LLTextSegment* cur_segment = getSegmentAtLocalPos( x, y );
971// if( cur_segment ) 971// if( cur_segment )
972// { 972// {
973// if(cur_segment->getStyle().isLink()) 973// if(cur_segment->getStyle()->isLink())
974// { 974// {
975// handled = TRUE; 975// handled = TRUE;
976// mHTML = cur_segment->getStyle().getLinkHREF(); 976// mHTML = cur_segment->getStyle()->getLinkHREF();
977// } 977// }
978// } 978// }
979// } 979// }
@@ -1008,7 +1008,7 @@ BOOL LLViewerTextEditor::handleDoubleClick(S32 x, S32 y, MASK mask)
1008 if( allowsEmbeddedItems() ) 1008 if( allowsEmbeddedItems() )
1009 { 1009 {
1010 const LLTextSegment* cur_segment = getSegmentAtLocalPos( x, y ); 1010 const LLTextSegment* cur_segment = getSegmentAtLocalPos( x, y );
1011 if( cur_segment && cur_segment->getStyle().getIsEmbeddedItem() ) 1011 if( cur_segment && cur_segment->getStyle()->getIsEmbeddedItem() )
1012 { 1012 {
1013 if( openEmbeddedItemAtPos( cur_segment->getStart() ) ) 1013 if( openEmbeddedItemAtPos( cur_segment->getStart() ) )
1014 { 1014 {
@@ -1598,7 +1598,7 @@ LLView* LLViewerTextEditor::fromXML(LLXMLNodePtr node, LLView *parent, LLUICtrlF
1598 text_editor->initFromXML(node, parent); 1598 text_editor->initFromXML(node, parent);
1599 1599
1600 // add text after all parameters have been set 1600 // add text after all parameters have been set
1601 text_editor->appendStyledText(text, FALSE, FALSE, NULL); 1601 text_editor->appendStyledText(text, FALSE, FALSE);
1602 1602
1603 return text_editor; 1603 return text_editor;
1604} 1604}
diff --git a/linden/indra/newview/llviewerthrottle.cpp b/linden/indra/newview/llviewerthrottle.cpp
index ceff856..54188cd 100644
--- a/linden/indra/newview/llviewerthrottle.cpp
+++ b/linden/indra/newview/llviewerthrottle.cpp
@@ -182,9 +182,9 @@ void LLViewerThrottleGroup::dump()
182 S32 i; 182 S32 i;
183 for (i = 0; i < TC_EOF; i++) 183 for (i = 0; i < TC_EOF; i++)
184 { 184 {
185 llinfos << LLViewerThrottle::sNames[i] << ": " << mThrottles[i] << llendl; 185 LL_DEBUGS("Throttle") << LLViewerThrottle::sNames[i] << ": " << mThrottles[i] << LL_ENDL;
186 } 186 }
187 llinfos << "Total: " << mThrottleTotal << llendl; 187 LL_DEBUGS("Throttle") << "Total: " << mThrottleTotal << LL_ENDL;
188} 188}
189 189
190class LLBPSListener : public LLSimpleListener 190class LLBPSListener : public LLSimpleListener
diff --git a/linden/indra/newview/llviewerwindow.cpp b/linden/indra/newview/llviewerwindow.cpp
index 4c76b8b..9f091dc 100644
--- a/linden/indra/newview/llviewerwindow.cpp
+++ b/linden/indra/newview/llviewerwindow.cpp
@@ -43,7 +43,7 @@
43#include "llviewquery.h" 43#include "llviewquery.h"
44#include "llxmltree.h" 44#include "llxmltree.h"
45//#include "llviewercamera.h" 45//#include "llviewercamera.h"
46#include "llglimmediate.h" 46#include "llrender.h"
47 47
48#include "llvoiceclient.h" // for push-to-talk button handling 48#include "llvoiceclient.h" // for push-to-talk button handling
49 49
@@ -182,6 +182,7 @@
182#include "llviewerdisplay.h" 182#include "llviewerdisplay.h"
183#include "llspatialpartition.h" 183#include "llspatialpartition.h"
184#include "llviewerjoystick.h" 184#include "llviewerjoystick.h"
185#include "llviewernetwork.h"
185 186
186#if LL_WINDOWS 187#if LL_WINDOWS
187#include "llwindebug.h" 188#include "llwindebug.h"
@@ -1529,9 +1530,9 @@ LLViewerWindow::LLViewerWindow(
1529 ignore_pixel_depth, 1530 ignore_pixel_depth,
1530 gSavedSettings.getU32("RenderFSAASamples")); 1531 gSavedSettings.getU32("RenderFSAASamples"));
1531#if LL_WINDOWS 1532#if LL_WINDOWS
1532 if (!LLWinDebug::setupExceptionHandler()) 1533 if (!LLWinDebug::checkExceptionHandler())
1533 { 1534 {
1534 llwarns << " Someone took over my exception handler (post createWindow)!" << llendl; 1535 LL_WARNS("Window") << " Someone took over my exception handler (post createWindow)!" << LL_ENDL;
1535 } 1536 }
1536#endif 1537#endif
1537 1538
@@ -1542,8 +1543,8 @@ LLViewerWindow::LLViewerWindow(
1542 llwarns << "Unable to create window, be sure screen is set at 32-bit color and your graphics driver is configured correctly. See README-linux.txt or README-solaris.txt for further information." 1543 llwarns << "Unable to create window, be sure screen is set at 32-bit color and your graphics driver is configured correctly. See README-linux.txt or README-solaris.txt for further information."
1543 << llendl; 1544 << llendl;
1544#else 1545#else
1545 llwarns << "Unable to create window, be sure screen is set at 32-bit color in Control Panels->Display->Settings" 1546 LL_WARNS("Window") << "Unable to create window, be sure screen is set at 32-bit color in Control Panels->Display->Settings"
1546 << llendl; 1547 << LL_ENDL;
1547#endif 1548#endif
1548 LLAppViewer::instance()->forceExit(1); 1549 LLAppViewer::instance()->forceExit(1);
1549 } 1550 }
@@ -1569,7 +1570,7 @@ LLViewerWindow::LLViewerWindow(
1569 // We want to set this stuff up BEFORE we initialize the pipeline, so we can turn off 1570 // We want to set this stuff up BEFORE we initialize the pipeline, so we can turn off
1570 // stuff like AGP if we think that it'll crash the viewer. 1571 // stuff like AGP if we think that it'll crash the viewer.
1571 // 1572 //
1572 llinfos << "Loading feature tables." << llendl; 1573 LL_DEBUGS("Window") << "Loading feature tables." << LL_ENDL;
1573 1574
1574 LLFeatureManager::getInstance()->init(); 1575 LLFeatureManager::getInstance()->init();
1575 1576
@@ -1638,7 +1639,7 @@ LLViewerWindow::LLViewerWindow(
1638 1639
1639void LLViewerWindow::initGLDefaults() 1640void LLViewerWindow::initGLDefaults()
1640{ 1641{
1641 gGL.blendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); 1642 gGL.setSceneBlendType(LLRender::BT_ALPHA);
1642 glColorMaterial( GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE ); 1643 glColorMaterial( GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE );
1643 1644
1644 F32 ambient[4] = {0.f,0.f,0.f,0.f }; 1645 F32 ambient[4] = {0.f,0.f,0.f,0.f };
@@ -1656,7 +1657,7 @@ void LLViewerWindow::initGLDefaults()
1656 1657
1657 glLightModelfv(GL_LIGHT_MODEL_AMBIENT, ambient); 1658 glLightModelfv(GL_LIGHT_MODEL_AMBIENT, ambient);
1658 1659
1659 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); 1660 gGL.getTexUnit(0)->setTextureBlendType(LLTexUnit::TB_MULT);
1660 1661
1661 glCullFace(GL_BACK); 1662 glCullFace(GL_BACK);
1662 1663
@@ -2198,7 +2199,7 @@ void LLViewerWindow::setNormalControlsVisible( BOOL visible )
2198 2199
2199 // ...and set the menu color appropriately. 2200 // ...and set the menu color appropriately.
2200 setMenuBackgroundColor(gAgent.getGodLevel() > GOD_NOT, 2201 setMenuBackgroundColor(gAgent.getGodLevel() > GOD_NOT,
2201 LLAppViewer::instance()->isInProductionGrid()); 2202 LLViewerLogin::getInstance()->isInProductionGrid());
2202 } 2203 }
2203 2204
2204 if ( gStatusBar ) 2205 if ( gStatusBar )
@@ -2213,15 +2214,15 @@ void LLViewerWindow::setMenuBackgroundColor(bool god_mode, bool dev_grid)
2213 LLString::format_map_t args; 2214 LLString::format_map_t args;
2214 LLColor4 new_bg_color; 2215 LLColor4 new_bg_color;
2215 2216
2216 if(god_mode && LLAppViewer::instance()->isInProductionGrid()) 2217 if(god_mode && LLViewerLogin::getInstance()->isInProductionGrid())
2217 { 2218 {
2218 new_bg_color = gColors.getColor( "MenuBarGodBgColor" ); 2219 new_bg_color = gColors.getColor( "MenuBarGodBgColor" );
2219 } 2220 }
2220 else if(god_mode && !LLAppViewer::instance()->isInProductionGrid()) 2221 else if(god_mode && !LLViewerLogin::getInstance()->isInProductionGrid())
2221 { 2222 {
2222 new_bg_color = gColors.getColor( "MenuNonProductionGodBgColor" ); 2223 new_bg_color = gColors.getColor( "MenuNonProductionGodBgColor" );
2223 } 2224 }
2224 else if(!god_mode && !LLAppViewer::instance()->isInProductionGrid()) 2225 else if(!god_mode && !LLViewerLogin::getInstance()->isInProductionGrid())
2225 { 2226 {
2226 new_bg_color = gColors.getColor( "MenuNonProductionBgColor" ); 2227 new_bg_color = gColors.getColor( "MenuNonProductionBgColor" );
2227 } 2228 }
@@ -3538,7 +3539,7 @@ void LLViewerWindow::hitUIElementAsync(S32 x, S32 y_from_bot, MASK mask, void (*
3538 const LLVector2& display_scale = getDisplayScale(); 3539 const LLVector2& display_scale = getDisplayScale();
3539 glScalef(display_scale.mV[VX], display_scale.mV[VY], 1.f); 3540 glScalef(display_scale.mV[VX], display_scale.mV[VY], 1.f);
3540 3541
3541 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); 3542 gGL.getTexUnit(0)->setTextureBlendType(LLTexUnit::TB_MULT);
3542 3543
3543 // make viewport big enough to handle antialiased frame buffers 3544 // make viewport big enough to handle antialiased frame buffers
3544 glViewport(x - (PICK_HALF_WIDTH + 2), y_from_bot - (PICK_HALF_WIDTH + 2), PICK_DIAMETER + 4, PICK_DIAMETER + 4); 3545 glViewport(x - (PICK_HALF_WIDTH + 2), y_from_bot - (PICK_HALF_WIDTH + 2), PICK_DIAMETER + 4, PICK_DIAMETER + 4);
@@ -4185,8 +4186,9 @@ void LLViewerWindow::movieSize(S32 new_width, S32 new_height)
4185 if ( (size.mX != new_width + BORDERWIDTH) 4186 if ( (size.mX != new_width + BORDERWIDTH)
4186 ||(size.mY != new_height + BORDERHEIGHT)) 4187 ||(size.mY != new_height + BORDERHEIGHT))
4187 { 4188 {
4188 S32 x = gViewerWindow->getWindowWidth(); 4189 // use actual display dimensions, not virtual UI dimensions
4189 S32 y = gViewerWindow->getWindowHeight(); 4190 S32 x = gViewerWindow->getWindowDisplayWidth();
4191 S32 y = gViewerWindow->getWindowDisplayHeight();
4190 BORDERWIDTH = size.mX - x; 4192 BORDERWIDTH = size.mX - x;
4191 BORDERHEIGHT = size.mY- y; 4193 BORDERHEIGHT = size.mY- y;
4192 LLCoordScreen new_size(new_width + BORDERWIDTH, 4194 LLCoordScreen new_size(new_width + BORDERWIDTH,
@@ -4938,7 +4940,7 @@ void LLViewerWindow::restoreGL(const LLString& progress_message)
4938 } 4940 }
4939 llinfos << "...Restoring GL done" << llendl; 4941 llinfos << "...Restoring GL done" << llendl;
4940#if LL_WINDOWS 4942#if LL_WINDOWS
4941 if (SetUnhandledExceptionFilter(LLWinDebug::handleException) != LLWinDebug::handleException) 4943 if(!LLWinDebug::checkExceptionHandler())
4942 { 4944 {
4943 llwarns << " Someone took over my exception handler (post restoreGL)!" << llendl; 4945 llwarns << " Someone took over my exception handler (post restoreGL)!" << llendl;
4944 } 4946 }
@@ -4951,21 +4953,21 @@ void LLViewerWindow::initFonts(F32 zoom_factor)
4951{ 4953{
4952 LLFontGL::destroyGL(); 4954 LLFontGL::destroyGL();
4953 LLFontGL::initDefaultFonts( gSavedSettings.getF32("FontScreenDPI"), 4955 LLFontGL::initDefaultFonts( gSavedSettings.getF32("FontScreenDPI"),
4954 mDisplayScale.mV[VX] * zoom_factor, 4956 mDisplayScale.mV[VX] * zoom_factor,
4955 mDisplayScale.mV[VY] * zoom_factor, 4957 mDisplayScale.mV[VY] * zoom_factor,
4956 gSavedSettings.getString("FontMonospace"), 4958 gSavedSettings.getString("FontMonospace"),
4957 gSavedSettings.getF32("FontSizeMonospace"), 4959 gSavedSettings.getF32("FontSizeMonospace"),
4958 gSavedSettings.getString("FontSansSerif"), 4960 gSavedSettings.getString("FontSansSerif"),
4959 gSavedSettings.getString("FontSansSerifFallback"), 4961 gSavedSettings.getString("FontSansSerifFallback"),
4960 gSavedSettings.getF32("FontSansSerifFallbackScale"), 4962 gSavedSettings.getF32("FontSansSerifFallbackScale"),
4961 gSavedSettings.getF32("FontSizeSmall"), 4963 gSavedSettings.getF32("FontSizeSmall"),
4962 gSavedSettings.getF32("FontSizeMedium"), 4964 gSavedSettings.getF32("FontSizeMedium"),
4963 gSavedSettings.getF32("FontSizeLarge"), 4965 gSavedSettings.getF32("FontSizeLarge"),
4964 gSavedSettings.getF32("FontSizeHuge"), 4966 gSavedSettings.getF32("FontSizeHuge"),
4965 gSavedSettings.getString("FontSansSerifBold"), 4967 gSavedSettings.getString("FontSansSerifBold"),
4966 gSavedSettings.getF32("FontSizeMedium"), 4968 gSavedSettings.getF32("FontSizeMedium"),
4967 gDirUtilp->getAppRODataDir() 4969 gDirUtilp->getAppRODataDir()
4968 ); 4970 );
4969} 4971}
4970void LLViewerWindow::toggleFullscreen(BOOL show_progress) 4972void LLViewerWindow::toggleFullscreen(BOOL show_progress)
4971{ 4973{
@@ -5018,20 +5020,16 @@ BOOL LLViewerWindow::checkSettings()
5018 return FALSE; 5020 return FALSE;
5019 } 5021 }
5020 5022
5021#ifndef LL_RELEASE_FOR_DOWNLOAD
5022 LLGLState::checkStates(); 5023 LLGLState::checkStates();
5023 LLGLState::checkTextureChannels(); 5024 LLGLState::checkTextureChannels();
5024#endif
5025 changeDisplaySettings(TRUE, 5025 changeDisplaySettings(TRUE,
5026 LLCoordScreen(gSavedSettings.getS32("FullScreenWidth"), 5026 LLCoordScreen(gSavedSettings.getS32("FullScreenWidth"),
5027 gSavedSettings.getS32("FullScreenHeight")), 5027 gSavedSettings.getS32("FullScreenHeight")),
5028 gSavedSettings.getBOOL("DisableVerticalSync"), 5028 gSavedSettings.getBOOL("DisableVerticalSync"),
5029 mShowFullscreenProgress); 5029 mShowFullscreenProgress);
5030 5030
5031#ifndef LL_RELEASE_FOR_DOWNLOAD
5032 LLGLState::checkStates(); 5031 LLGLState::checkStates();
5033 LLGLState::checkTextureChannels(); 5032 LLGLState::checkTextureChannels();
5034#endif
5035 return TRUE; 5033 return TRUE;
5036 } 5034 }
5037 return FALSE; 5035 return FALSE;
diff --git a/linden/indra/newview/llviewerwindow.h b/linden/indra/newview/llviewerwindow.h
index a9f941c..da5fa4e 100644
--- a/linden/indra/newview/llviewerwindow.h
+++ b/linden/indra/newview/llviewerwindow.h
@@ -114,12 +114,18 @@ public:
114 // ACCESSORS 114 // ACCESSORS
115 // 115 //
116 LLView* getRootView() const { return mRootView; } 116 LLView* getRootView() const { return mRootView; }
117
118 // Window in raw pixels as seen on screen.
117 const LLRect& getWindowRect() const { return mWindowRect; }; 119 const LLRect& getWindowRect() const { return mWindowRect; };
120 S32 getWindowDisplayHeight() const;
121 S32 getWindowDisplayWidth() const;
122
123 // Window in scaled pixels (via UI scale), use this for
124 // UI elements checking size.
118 const LLRect& getVirtualWindowRect() const { return mVirtualWindowRect; }; 125 const LLRect& getVirtualWindowRect() const { return mVirtualWindowRect; };
119 S32 getWindowHeight() const; 126 S32 getWindowHeight() const;
120 S32 getWindowWidth() const; 127 S32 getWindowWidth() const;
121 S32 getWindowDisplayHeight() const; 128
122 S32 getWindowDisplayWidth() const;
123 LLWindow* getWindow() const { return mWindow; } 129 LLWindow* getWindow() const { return mWindow; }
124 void* getPlatformWindow() const { return mWindow->getPlatformWindow(); } 130 void* getPlatformWindow() const { return mWindow->getPlatformWindow(); }
125 void focusClient() const { return mWindow->focusClient(); }; 131 void focusClient() const { return mWindow->focusClient(); };
diff --git a/linden/indra/newview/llvoavatar.cpp b/linden/indra/newview/llvoavatar.cpp
index 7de2f9c..6b5f066 100644
--- a/linden/indra/newview/llvoavatar.cpp
+++ b/linden/indra/newview/llvoavatar.cpp
@@ -37,7 +37,7 @@
37 37
38#include "llvoavatar.h" 38#include "llvoavatar.h"
39 39
40#include "llglimmediate.h" 40#include "llrender.h"
41#include "audioengine.h" 41#include "audioengine.h"
42#include "imageids.h" 42#include "imageids.h"
43#include "indra_constants.h" 43#include "indra_constants.h"
@@ -95,7 +95,6 @@
95#include "llstatusbar.h" 95#include "llstatusbar.h"
96#include "lltargetingmotion.h" 96#include "lltargetingmotion.h"
97#include "lltexlayer.h" 97#include "lltexlayer.h"
98#include "lltoolbar.h"
99#include "lltoolgrab.h" // for needsRenderBeam 98#include "lltoolgrab.h" // for needsRenderBeam
100#include "lltoolmgr.h" // for needsRenderBeam 99#include "lltoolmgr.h" // for needsRenderBeam
101#include "lltoolmorph.h" 100#include "lltoolmorph.h"
@@ -117,20 +116,14 @@
117#include "llspatialpartition.h" 116#include "llspatialpartition.h"
118#include "llglslshader.h" 117#include "llglslshader.h"
119#include "llappviewer.h" 118#include "llappviewer.h"
120#include "lscript_byteformat.h" 119#include "llsky.h"
120#include "llanimstatelabels.h"
121 121
122//#include "vtune/vtuneapi.h" 122//#include "vtune/vtuneapi.h"
123 123
124//Ventrella 124#include "llgesturemgr.h" //needed to trigger the voice gesticulations
125#include "llgesturemgr.h" //needed to trigger the voice gestculations
126#include "llvoicevisualizer.h" 125#include "llvoicevisualizer.h"
127#include "llvoiceclient.h" 126#include "llvoiceclient.h"
128//end Ventrella
129
130// Direct imports, evil
131extern LLSky gSky;
132extern void set_avatar_character(void* charNameArg);
133extern BOOL gRenderForSelect;
134 127
135LLXmlTree LLVOAvatar::sXMLTree; 128LLXmlTree LLVOAvatar::sXMLTree;
136LLXmlTree LLVOAvatar::sSkeletonXMLTree; 129LLXmlTree LLVOAvatar::sSkeletonXMLTree;
@@ -686,7 +679,8 @@ LLVOAvatar::LLVOAvatar(
686 mTexHairColor( NULL ), 679 mTexHairColor( NULL ),
687 mTexEyeColor( NULL ), 680 mTexEyeColor( NULL ),
688 mNeedsSkin(FALSE), 681 mNeedsSkin(FALSE),
689 mUpdatePeriod(1) 682 mUpdatePeriod(1),
683 mFullyLoadedInitialized(FALSE)
690{ 684{
691 LLMemType mt(LLMemType::MTYPE_AVATAR); 685 LLMemType mt(LLMemType::MTYPE_AVATAR);
692 686
@@ -766,6 +760,10 @@ LLVOAvatar::LLVOAvatar(
766 mStepOnLand = TRUE; 760 mStepOnLand = TRUE;
767 mStepMaterial = 0; 761 mStepMaterial = 0;
768 762
763 mLipSyncActive = false;
764 mOohMorph = NULL;
765 mAahMorph = NULL;
766
769 //------------------------------------------------------------------------- 767 //-------------------------------------------------------------------------
770 // initialize joint, mesh and shape members 768 // initialize joint, mesh and shape members
771 //------------------------------------------------------------------------- 769 //-------------------------------------------------------------------------
@@ -950,10 +948,8 @@ LLVOAvatar::LLVOAvatar(
950 948
951 //VTPause(); // VTune 949 //VTPause(); // VTune
952 950
953 //Ventrella
954 mVoiceVisualizer->setVoiceEnabled( gVoiceClient->getVoiceEnabled( mID ) ); 951 mVoiceVisualizer->setVoiceEnabled( gVoiceClient->getVoiceEnabled( mID ) );
955 mCurrentGesticulationLevel = 0; 952 mCurrentGesticulationLevel = 0;
956 //END Ventrella
957} 953}
958 954
959//------------------------------------------------------------------------ 955//------------------------------------------------------------------------
@@ -1887,6 +1883,26 @@ void LLVOAvatar::buildCharacter()
1887 updateHeadOffset(); 1883 updateHeadOffset();
1888 1884
1889 //------------------------------------------------------------------------- 1885 //-------------------------------------------------------------------------
1886 // initialize lip sync morph pointers
1887 //-------------------------------------------------------------------------
1888 mOohMorph = getVisualParam( "Lipsync_Ooh" );
1889 mAahMorph = getVisualParam( "Lipsync_Aah" );
1890
1891 // If we don't have the Ooh morph, use the Kiss morph
1892 if (!mOohMorph)
1893 {
1894 llwarns << "Missing 'Ooh' morph for lipsync, using fallback." << llendl;
1895 mOohMorph = getVisualParam( "Express_Kiss" );
1896 }
1897
1898 // If we don't have the Aah morph, use the Open Mouth morph
1899 if (!mAahMorph)
1900 {
1901 llwarns << "Missing 'Aah' morph for lipsync, using fallback." << llendl;
1902 mAahMorph = getVisualParam( "Express_Open_Mouth" );
1903 }
1904
1905 //-------------------------------------------------------------------------
1890 // start default motions 1906 // start default motions
1891 //------------------------------------------------------------------------- 1907 //-------------------------------------------------------------------------
1892 startMotion( ANIM_AGENT_HEAD_ROT ); 1908 startMotion( ANIM_AGENT_HEAD_ROT );
@@ -2449,88 +2465,93 @@ BOOL LLVOAvatar::idleUpdate(LLAgent &agent, LLWorld &world, const F64 &time)
2449 // animate the character 2465 // animate the character
2450 // store off last frame's root position to be consistent with camera position 2466 // store off last frame's root position to be consistent with camera position
2451 LLVector3 root_pos_last = mRoot.getWorldPosition(); 2467 LLVector3 root_pos_last = mRoot.getWorldPosition();
2452
2453 BOOL detailed_update = updateCharacter(agent); 2468 BOOL detailed_update = updateCharacter(agent);
2469 bool voiceEnabled = gVoiceClient->getVoiceEnabled( mID ) && gVoiceClient->inProximalChannel();
2454 2470
2455 { 2471 // disable voice visualizer when in mouselook
2456 //Ventrella 2472 mVoiceVisualizer->setVoiceEnabled( voiceEnabled && !(mIsSelf && gAgent.cameraMouselook()) );
2457 bool voiceEnabled = gVoiceClient->getVoiceEnabled( mID ) && gVoiceClient->inProximalChannel(); 2473 if ( voiceEnabled )
2458 // disable voice visualizer when in mouselook 2474 {
2459 mVoiceVisualizer->setVoiceEnabled( voiceEnabled && !(mIsSelf && gAgent.cameraMouselook()) ); 2475 //----------------------------------------------------------------
2460 if ( voiceEnabled ) 2476 // Only do gesture triggering for your own avatar, and only when you're in a proximal channel.
2461 { 2477 //----------------------------------------------------------------
2462 //---------------------------------------------------------------- 2478 if( mIsSelf )
2463 // Only do gesture triggering for your own avatar, and only when you're in a proximal channel. 2479 {
2464 //---------------------------------------------------------------- 2480 //----------------------------------------------------------------------------------------
2465 if( mIsSelf ) 2481 // The following takes the voice signal and uses that to trigger gesticulations.
2482 //----------------------------------------------------------------------------------------
2483 int lastGesticulationLevel = mCurrentGesticulationLevel;
2484 mCurrentGesticulationLevel = mVoiceVisualizer->getCurrentGesticulationLevel();
2485
2486 //---------------------------------------------------------------------------------------------------
2487 // If "current gesticulation level" changes, we catch this, and trigger the new gesture
2488 //---------------------------------------------------------------------------------------------------
2489 if ( lastGesticulationLevel != mCurrentGesticulationLevel )
2466 { 2490 {
2467 //---------------------------------------------------------------------------------------- 2491 if ( mCurrentGesticulationLevel != VOICE_GESTICULATION_LEVEL_OFF )
2468 // The following takes the voice signal and uses that to trigger gesticulations.
2469 //----------------------------------------------------------------------------------------
2470 int lastGesticulationLevel = mCurrentGesticulationLevel;
2471 mCurrentGesticulationLevel = mVoiceVisualizer->getCurrentGesticulationLevel();
2472
2473 //---------------------------------------------------------------------------------------------------
2474 // If "current gesticulation level" changes, we catch this, and trigger the new gesture
2475 //---------------------------------------------------------------------------------------------------
2476 if ( lastGesticulationLevel != mCurrentGesticulationLevel )
2477 {
2478 if ( mCurrentGesticulationLevel != VOICE_GESTICULATION_LEVEL_OFF )
2479 {
2480 LLString gestureString = "unInitialized";
2481 if ( mCurrentGesticulationLevel == 0 ) { gestureString = "/voicelevel1"; }
2482 else if ( mCurrentGesticulationLevel == 1 ) { gestureString = "/voicelevel2"; }
2483 else if ( mCurrentGesticulationLevel == 2 ) { gestureString = "/voicelevel3"; }
2484 else { llinfos << "oops - CurrentGesticulationLevel can be only 0, 1, or 2" << llendl; }
2485
2486 // this is the call that Karl S. created for triggering gestures from within the code.
2487 gGestureManager.triggerAndReviseString( gestureString );
2488 }
2489 }
2490
2491 } //if( mIsSelf )
2492
2493 //-----------------------------------------------------------------------------------------------------------------
2494 // If the avatar is speaking, then the voice amplitude signal is passed to the voice visualizer.
2495 // Also, here we trigger voice visualizer start and stop speaking, so it can animate the voice symbol.
2496 //
2497 // Notice the calls to "gAwayTimer.reset()". This resets the timer that determines how long the avatar has been
2498 // "away", so that the avatar doesn't lapse into away-mode (and slump over) while the user is still talking.
2499 //-----------------------------------------------------------------------------------------------------------------
2500 if ( gVoiceClient->getIsSpeaking( mID ) )
2501 {
2502 if ( ! mVoiceVisualizer->getCurrentlySpeaking() )
2503 { 2492 {
2504 mVoiceVisualizer->setStartSpeaking(); 2493 LLString gestureString = "unInitialized";
2494 if ( mCurrentGesticulationLevel == 0 ) { gestureString = "/voicelevel1"; }
2495 else if ( mCurrentGesticulationLevel == 1 ) { gestureString = "/voicelevel2"; }
2496 else if ( mCurrentGesticulationLevel == 2 ) { gestureString = "/voicelevel3"; }
2497 else { llinfos << "oops - CurrentGesticulationLevel can be only 0, 1, or 2" << llendl; }
2505 2498
2506 //printf( "gAwayTimer.reset();\n" ); 2499 // this is the call that Karl S. created for triggering gestures from within the code.
2507 } 2500 gGestureManager.triggerAndReviseString( gestureString );
2508
2509 mVoiceVisualizer->setSpeakingAmplitude( gVoiceClient->getCurrentPower( mID ) );
2510
2511 if( mIsSelf )
2512 {
2513 gAgent.clearAFK();
2514 } 2501 }
2515 } 2502 }
2516 else 2503
2504 } //if( mIsSelf )
2505
2506 //-----------------------------------------------------------------------------------------------------------------
2507 // If the avatar is speaking, then the voice amplitude signal is passed to the voice visualizer.
2508 // Also, here we trigger voice visualizer start and stop speaking, so it can animate the voice symbol.
2509 //
2510 // Notice the calls to "gAwayTimer.reset()". This resets the timer that determines how long the avatar has been
2511 // "away", so that the avatar doesn't lapse into away-mode (and slump over) while the user is still talking.
2512 //-----------------------------------------------------------------------------------------------------------------
2513 if ( gVoiceClient->getIsSpeaking( mID ) )
2514 {
2515 if ( ! mVoiceVisualizer->getCurrentlySpeaking() )
2516 {
2517 mVoiceVisualizer->setStartSpeaking();
2518
2519 //printf( "gAwayTimer.reset();\n" );
2520 }
2521
2522 mVoiceVisualizer->setSpeakingAmplitude( gVoiceClient->getCurrentPower( mID ) );
2523
2524 if( mIsSelf )
2525 {
2526 gAgent.clearAFK();
2527 }
2528 }
2529 else
2530 {
2531 if ( mVoiceVisualizer->getCurrentlySpeaking() )
2517 { 2532 {
2518 if ( mVoiceVisualizer->getCurrentlySpeaking() ) 2533 mVoiceVisualizer->setStopSpeaking();
2534
2535 if ( mLipSyncActive )
2519 { 2536 {
2520 mVoiceVisualizer->setStopSpeaking(); 2537 if( mOohMorph ) mOohMorph->setWeight(mOohMorph->getMinWeight(), FALSE);
2538 if( mAahMorph ) mAahMorph->setWeight(mAahMorph->getMinWeight(), FALSE);
2539
2540 mLipSyncActive = false;
2541 LLCharacter::updateVisualParams();
2542 dirtyMesh();
2521 } 2543 }
2522 } 2544 }
2523 2545 }
2524 //-------------------------------------------------------------------------------------------- 2546
2525 // here we get the approximate head position and set as sound source for the voice symbol 2547 //--------------------------------------------------------------------------------------------
2526 // (the following version uses a tweak of "mHeadOffset" which handle sitting vs. standing) 2548 // here we get the approximate head position and set as sound source for the voice symbol
2527 //-------------------------------------------------------------------------------------------- 2549 // (the following version uses a tweak of "mHeadOffset" which handle sitting vs. standing)
2528 LLVector3 headOffset = LLVector3( 0.0f, 0.0f, mHeadOffset.mV[2] ); 2550 //--------------------------------------------------------------------------------------------
2529 mVoiceVisualizer->setVoiceSourceWorldPosition( mRoot.getWorldPosition() + headOffset ); 2551 LLVector3 headOffset = LLVector3( 0.0f, 0.0f, mHeadOffset.mV[2] );
2530 2552 mVoiceVisualizer->setVoiceSourceWorldPosition( mRoot.getWorldPosition() + headOffset );
2531 }//if ( voiceEnabled ) 2553
2532 } 2554 }//if ( voiceEnabled )
2533 //End Ventrella
2534 2555
2535 if (LLVOAvatar::sJointDebug) 2556 if (LLVOAvatar::sJointDebug)
2536 { 2557 {
@@ -2704,6 +2725,76 @@ BOOL LLVOAvatar::idleUpdate(LLAgent &agent, LLWorld &world, const F64 &time)
2704 dirtyMesh(); 2725 dirtyMesh();
2705 } 2726 }
2706 2727
2728 // Use the Lipsync_Ooh and Lipsync_Aah morphs for lip sync
2729 if ( voiceEnabled && (gVoiceClient->lipSyncEnabled()) && gVoiceClient->getIsSpeaking( mID ) )
2730 {
2731 F32 ooh_morph_amount = 0.0f;
2732 F32 aah_morph_amount = 0.0f;
2733
2734 mVoiceVisualizer->lipSyncOohAah( ooh_morph_amount, aah_morph_amount );
2735
2736 if( mOohMorph )
2737 {
2738 F32 ooh_weight = mOohMorph->getMinWeight()
2739 + ooh_morph_amount * (mOohMorph->getMaxWeight() - mOohMorph->getMinWeight());
2740
2741 mOohMorph->setWeight( ooh_weight, FALSE );
2742 }
2743
2744 if( mAahMorph )
2745 {
2746 F32 aah_weight = mAahMorph->getMinWeight()
2747 + aah_morph_amount * (mAahMorph->getMaxWeight() - mAahMorph->getMinWeight());
2748
2749 mAahMorph->setWeight( aah_weight, FALSE );
2750 }
2751
2752 mLipSyncActive = true;
2753 LLCharacter::updateVisualParams();
2754 dirtyMesh();
2755 }
2756
2757 // update visibility when avatar is partially loaded
2758 if (updateIsFullyLoaded()) // changed?
2759 {
2760 if (isFullyLoaded())
2761 {
2762 deleteParticleSource();
2763 }
2764 else
2765 {
2766 LLPartSysData particle_parameters;
2767
2768 // fancy particle cloud designed by Brent
2769 particle_parameters.mPartData.mMaxAge = 4.f;
2770 particle_parameters.mPartData.mStartScale.mV[VX] = 0.8f;
2771 particle_parameters.mPartData.mStartScale.mV[VX] = 0.8f;
2772 particle_parameters.mPartData.mStartScale.mV[VY] = 1.0f;
2773 particle_parameters.mPartData.mEndScale.mV[VX] = 0.02f;
2774 particle_parameters.mPartData.mEndScale.mV[VY] = 0.02f;
2775 particle_parameters.mPartData.mStartColor = LLColor4(1, 1, 1, 0.5f);
2776 particle_parameters.mPartData.mEndColor = LLColor4(1, 1, 1, 0.0f);
2777 particle_parameters.mPartData.mStartScale.mV[VX] = 0.8f;
2778 LLViewerImage* cloud = gImageList.getImageFromFile("cloud-particle.j2c");
2779 particle_parameters.mPartImageID = cloud->getID();
2780 particle_parameters.mMaxAge = 0.f;
2781 particle_parameters.mPattern = LLPartSysData::LL_PART_SRC_PATTERN_ANGLE_CONE;
2782 particle_parameters.mInnerAngle = 3.14159f;
2783 particle_parameters.mOuterAngle = 0.f;
2784 particle_parameters.mBurstRate = 0.02f;
2785 particle_parameters.mBurstRadius = 0.0f;
2786 particle_parameters.mBurstPartCount = 1;
2787 particle_parameters.mBurstSpeedMin = 0.1f;
2788 particle_parameters.mBurstSpeedMax = 1.f;
2789 particle_parameters.mPartData.mFlags = ( LLPartData::LL_PART_INTERP_COLOR_MASK | LLPartData::LL_PART_INTERP_SCALE_MASK |
2790 LLPartData::LL_PART_EMISSIVE_MASK | // LLPartData::LL_PART_FOLLOW_SRC_MASK |
2791 LLPartData::LL_PART_TARGET_POS_MASK );
2792
2793 setParticleSource(particle_parameters, getID());
2794 }
2795 }
2796
2797
2707 // update wind effect 2798 // update wind effect
2708 if ((LLShaderMgr::getVertexShaderLevel(LLShaderMgr::SHADER_AVATAR) >= LLDrawPoolAvatar::SHADER_LEVEL_CLOTH)) 2799 if ((LLShaderMgr::getVertexShaderLevel(LLShaderMgr::SHADER_AVATAR) >= LLDrawPoolAvatar::SHADER_LEVEL_CLOTH))
2709 { 2800 {
@@ -3883,7 +3974,7 @@ U32 LLVOAvatar::renderSkinned(EAvatarRenderPass pass)
3883 if (mDirtyMesh || mDrawable->isState(LLDrawable::REBUILD_GEOMETRY)) 3974 if (mDirtyMesh || mDrawable->isState(LLDrawable::REBUILD_GEOMETRY))
3884 { //LOD changed or new mesh created, allocate new vertex buffer if needed 3975 { //LOD changed or new mesh created, allocate new vertex buffer if needed
3885 updateMeshData(); 3976 updateMeshData();
3886 mDirtyMesh = FALSE; 3977 mDirtyMesh = FALSE;
3887 mNeedsSkin = TRUE; 3978 mNeedsSkin = TRUE;
3888 mDrawable->clearState(LLDrawable::REBUILD_GEOMETRY); 3979 mDrawable->clearState(LLDrawable::REBUILD_GEOMETRY);
3889 } 3980 }
@@ -3957,7 +4048,10 @@ U32 LLVOAvatar::renderSkinned(EAvatarRenderPass pass)
3957 } 4048 }
3958 4049
3959 // render collision normal 4050 // render collision normal
3960 if (sShowFootPlane && mDrawable.notNull()) 4051 // *NOTE: this is disabled (there is no UI for enabling sShowFootPlane) due
4052 // to DEV-14477. the code is left here to aid in tracking down the cause
4053 // of the crash in the future. -brad
4054 if (!gRenderForSelect && sShowFootPlane && mDrawable.notNull())
3961 { 4055 {
3962 LLVector3 slaved_pos = mDrawable->getPositionAgent(); 4056 LLVector3 slaved_pos = mDrawable->getPositionAgent();
3963 LLVector3 foot_plane_normal(mFootPlane.mV[VX], mFootPlane.mV[VY], mFootPlane.mV[VZ]); 4057 LLVector3 foot_plane_normal(mFootPlane.mV[VX], mFootPlane.mV[VY], mFootPlane.mV[VZ]);
@@ -3985,7 +4079,9 @@ U32 LLVOAvatar::renderSkinned(EAvatarRenderPass pass)
3985 gGL.vertex3f(collide_point.mV[VX], collide_point.mV[VY], collide_point.mV[VZ]); 4079 gGL.vertex3f(collide_point.mV[VX], collide_point.mV[VY], collide_point.mV[VZ]);
3986 gGL.vertex3f(collide_point.mV[VX] + mFootPlane.mV[VX], collide_point.mV[VY] + mFootPlane.mV[VY], collide_point.mV[VZ] + mFootPlane.mV[VZ]); 4080 gGL.vertex3f(collide_point.mV[VX] + mFootPlane.mV[VX], collide_point.mV[VY] + mFootPlane.mV[VY], collide_point.mV[VZ] + mFootPlane.mV[VZ]);
3987 4081
3988 }gGL.end(); 4082 }
4083 gGL.end();
4084 gGL.flush();
3989 } 4085 }
3990 //-------------------------------------------------------------------- 4086 //--------------------------------------------------------------------
3991 // render all geomety attached to the skeleton 4087 // render all geomety attached to the skeleton
@@ -4027,23 +4123,23 @@ U32 LLVOAvatar::renderTransparent()
4027 BOOL first_pass = FALSE; 4123 BOOL first_pass = FALSE;
4028 if( isWearingWearableType( WT_SKIRT ) ) 4124 if( isWearingWearableType( WT_SKIRT ) )
4029 { 4125 {
4030 glAlphaFunc(GL_GREATER,0.25f); 4126 gGL.setAlphaRejectSettings(LLRender::CF_GREATER, 0.25f);
4031 num_indices += mSkirtLOD.render(mAdjustedPixelArea, FALSE); 4127 num_indices += mSkirtLOD.render(mAdjustedPixelArea, FALSE);
4032 first_pass = FALSE; 4128 first_pass = FALSE;
4033 glAlphaFunc(GL_GREATER,0.01f); 4129 gGL.setAlphaRejectSettings(LLRender::CF_DEFAULT);
4034 } 4130 }
4035 4131
4036 if (!mIsSelf || gAgent.needsRenderHead()) 4132 if (!mIsSelf || gAgent.needsRenderHead())
4037 { 4133 {
4038 if (LLPipeline::sImpostorRender) 4134 if (LLPipeline::sImpostorRender)
4039 { 4135 {
4040 glAlphaFunc(GL_GREATER, 0.5f); 4136 gGL.setAlphaRejectSettings(LLRender::CF_GREATER, 0.5f);
4041 } 4137 }
4042 num_indices += mEyeLashLOD.render(mAdjustedPixelArea, first_pass); 4138 num_indices += mEyeLashLOD.render(mAdjustedPixelArea, first_pass);
4043 num_indices += mHairLOD.render(mAdjustedPixelArea, FALSE); 4139 num_indices += mHairLOD.render(mAdjustedPixelArea, FALSE);
4044 if (LLPipeline::sImpostorRender) 4140 if (LLPipeline::sImpostorRender)
4045 { 4141 {
4046 glAlphaFunc(GL_GREATER, 0.01f); 4142 gGL.setAlphaRejectSettings(LLRender::CF_DEFAULT);
4047 } 4143 }
4048 } 4144 }
4049 4145
@@ -4136,7 +4232,7 @@ U32 LLVOAvatar::renderImpostor(LLColor4U color)
4136 up *= mImpostorDim.mV[1]; 4232 up *= mImpostorDim.mV[1];
4137 4233
4138 LLGLEnable test(GL_ALPHA_TEST); 4234 LLGLEnable test(GL_ALPHA_TEST);
4139 glAlphaFunc(GL_GREATER, 0.f); 4235 gGL.setAlphaRejectSettings(LLRender::CF_GREATER, 0.f);
4140 4236
4141 gGL.color4f(1,1,1,1); 4237 gGL.color4f(1,1,1,1);
4142 gGL.color4ubv(color.mV); 4238 gGL.color4ubv(color.mV);
@@ -6637,6 +6733,89 @@ BOOL LLVOAvatar::isVisible()
6637} 6733}
6638 6734
6639 6735
6736// call periodically to keep isFullyLoaded up to date.
6737// returns true if the value has changed.
6738BOOL LLVOAvatar::updateIsFullyLoaded()
6739{
6740 // a "heuristic" to determine if we have enough avatar data to render
6741 // (to avoid rendering a "Ruth" - DEV-3168)
6742
6743 BOOL loading = FALSE;
6744
6745 // do we have a shape?
6746 if (visualParamWeightsAreDefault())
6747 {
6748 loading = TRUE;
6749 }
6750
6751 // are our texture settings still default?
6752 if ((getTEImage( TEX_HAIR )->getID() == IMG_DEFAULT))
6753 {
6754 loading = TRUE;
6755 }
6756
6757 // special case to keep nudity off orientation island -
6758 // this is fragilely dependent on the compositing system,
6759 // which gets available textures in the following order:
6760 //
6761 // 1) use the baked texture
6762 // 2) use the layerset
6763 // 3) use the previously baked texture
6764 //
6765 // on orientation island case (3) can show naked skin.
6766 // so we test for that here:
6767 //
6768 // if we were previously unloaded, and we don't have enough
6769 // texture info for our shirt/pants, stay unloaded:
6770 if (!mPreviousFullyLoaded)
6771 {
6772 if ((!isLocalTextureDataAvailable(mLowerBodyLayerSet)) &&
6773 (getTEImage(TEX_LOWER_BAKED)->getID() == IMG_DEFAULT_AVATAR))
6774 {
6775 loading = TRUE;
6776 }
6777
6778 if ((!isLocalTextureDataAvailable(mUpperBodyLayerSet)) &&
6779 (getTEImage(TEX_UPPER_BAKED)->getID() == IMG_DEFAULT_AVATAR))
6780 {
6781 loading = TRUE;
6782 }
6783 }
6784
6785
6786 // we wait a little bit before giving the all clear,
6787 // to let textures settle down
6788 const F32 PAUSE = 1.f;
6789 if (loading)
6790 mFullyLoadedTimer.reset();
6791
6792 mFullyLoaded = (mFullyLoadedTimer.getElapsedTimeF32() > PAUSE);
6793
6794
6795 // did our loading state "change" from last call?
6796 const S32 UPDATE_RATE = 30;
6797 BOOL changed =
6798 ((mFullyLoaded != mPreviousFullyLoaded) || // if the value is different from the previous call
6799 (!mFullyLoadedInitialized) || // if we've never been called before
6800 (mFullyLoadedFrameCounter % UPDATE_RATE == 0)); // every now and then issue a change
6801
6802 mPreviousFullyLoaded = mFullyLoaded;
6803 mFullyLoadedInitialized = TRUE;
6804 mFullyLoadedFrameCounter++;
6805
6806 return changed;
6807}
6808
6809
6810BOOL LLVOAvatar::isFullyLoaded()
6811{
6812 if (gSavedSettings.getBOOL("RenderUnloadedAvatar"))
6813 return TRUE;
6814 else
6815 return mFullyLoaded;
6816}
6817
6818
6640//----------------------------------------------------------------------------- 6819//-----------------------------------------------------------------------------
6641// findMotion() 6820// findMotion()
6642//----------------------------------------------------------------------------- 6821//-----------------------------------------------------------------------------
@@ -8289,12 +8468,12 @@ void LLVOAvatar::processAvatarAppearance( LLMessageSystem* mesgsys )
8289} 8468}
8290 8469
8291// static 8470// static
8292void LLVOAvatar::getAnimLabels( LLDynamicArray<const char*>* labels ) 8471void LLVOAvatar::getAnimLabels( LLDynamicArray<std::string>* labels )
8293{ 8472{
8294 S32 i; 8473 S32 i;
8295 for( i = 0; i < gUserAnimStatesCount; i++ ) 8474 for( i = 0; i < gUserAnimStatesCount; i++ )
8296 { 8475 {
8297 labels->put( gUserAnimStates[i].mLabel ); 8476 labels->put( LLAnimStateLabels::getStateLabel( gUserAnimStates[i].mName ) );
8298 } 8477 }
8299 8478
8300 // Special case to trigger away (AFK) state 8479 // Special case to trigger away (AFK) state
@@ -8302,13 +8481,13 @@ void LLVOAvatar::getAnimLabels( LLDynamicArray<const char*>* labels )
8302} 8481}
8303 8482
8304// static 8483// static
8305void LLVOAvatar::getAnimNames( LLDynamicArray<const char*>* names ) 8484void LLVOAvatar::getAnimNames( LLDynamicArray<std::string>* names )
8306{ 8485{
8307 S32 i; 8486 S32 i;
8308 8487
8309 for( i = 0; i < gUserAnimStatesCount; i++ ) 8488 for( i = 0; i < gUserAnimStatesCount; i++ )
8310 { 8489 {
8311 names->put( gUserAnimStates[i].mName ); 8490 names->put( std::string(gUserAnimStates[i].mName) );
8312 } 8491 }
8313 8492
8314 // Special case to trigger away (AFK) state 8493 // Special case to trigger away (AFK) state
@@ -9507,7 +9686,7 @@ BOOL LLVOAvatar::updateLOD()
9507 if (mDirtyMesh || mDrawable->isState(LLDrawable::REBUILD_GEOMETRY)) 9686 if (mDirtyMesh || mDrawable->isState(LLDrawable::REBUILD_GEOMETRY))
9508 { //LOD changed or new mesh created, allocate new vertex buffer if needed 9687 { //LOD changed or new mesh created, allocate new vertex buffer if needed
9509 updateMeshData(); 9688 updateMeshData();
9510 mDirtyMesh = FALSE; 9689 mDirtyMesh = FALSE;
9511 mNeedsSkin = TRUE; 9690 mNeedsSkin = TRUE;
9512 mDrawable->clearState(LLDrawable::REBUILD_GEOMETRY); 9691 mDrawable->clearState(LLDrawable::REBUILD_GEOMETRY);
9513 } 9692 }
diff --git a/linden/indra/newview/llvoavatar.h b/linden/indra/newview/llvoavatar.h
index bc68cf4..1df8275 100644
--- a/linden/indra/newview/llvoavatar.h
+++ b/linden/indra/newview/llvoavatar.h
@@ -413,8 +413,8 @@ public:
413 //-------------------------------------------------------------------- 413 //--------------------------------------------------------------------
414 BOOL allocateCollisionVolumes( U32 num ); 414 BOOL allocateCollisionVolumes( U32 num );
415 void resetHUDAttachments(); 415 void resetHUDAttachments();
416 static void getAnimLabels( LLDynamicArray<const char*>* labels ); 416 static void getAnimLabels( LLDynamicArray<std::string>* labels );
417 static void getAnimNames( LLDynamicArray<const char*>* names ); 417 static void getAnimNames( LLDynamicArray<std::string>* names );
418 418
419 static void onCustomizeStart(); 419 static void onCustomizeStart();
420 static void onCustomizeEnd(); 420 static void onCustomizeEnd();
@@ -832,6 +832,17 @@ public:
832 BOOL mAppearanceAnimating; 832 BOOL mAppearanceAnimating;
833 833
834 //-------------------------------------------------------------------- 834 //--------------------------------------------------------------------
835 // we're morphing for lip sync
836 //--------------------------------------------------------------------
837 bool mLipSyncActive;
838
839 //--------------------------------------------------------------------
840 // cached pointers morphs for lip sync
841 //--------------------------------------------------------------------
842 LLVisualParam *mOohMorph;
843 LLVisualParam *mAahMorph;
844
845 //--------------------------------------------------------------------
835 // static members 846 // static members
836 //-------------------------------------------------------------------- 847 //--------------------------------------------------------------------
837 static S32 sMaxVisible; 848 static S32 sMaxVisible;
@@ -957,7 +968,21 @@ protected:
957 968
958 static LLVOAvatarSkeletonInfo* sSkeletonInfo; 969 static LLVOAvatarSkeletonInfo* sSkeletonInfo;
959 static LLVOAvatarInfo* sAvatarInfo; 970 static LLVOAvatarInfo* sAvatarInfo;
971
960 972
973 //--------------------------------------------------------------------
974 // Handling partially loaded avatars (Ruth)
975 //--------------------------------------------------------------------
976public:
977 BOOL isFullyLoaded();
978 BOOL updateIsFullyLoaded();
979private:
980 BOOL mFullyLoaded;
981 BOOL mPreviousFullyLoaded;
982 BOOL mFullyLoadedInitialized;
983 S32 mFullyLoadedFrameCounter;
984 LLFrameTimer mFullyLoadedTimer;
985
961protected: 986protected:
962 987
963 BOOL loadSkeletonNode(); 988 BOOL loadSkeletonNode();
diff --git a/linden/indra/newview/llvocache.cpp b/linden/indra/newview/llvocache.cpp
index 39ee63f..45b7782 100644
--- a/linden/indra/newview/llvocache.cpp
+++ b/linden/indra/newview/llvocache.cpp
@@ -63,7 +63,7 @@ LLVOCacheEntry::LLVOCacheEntry()
63} 63}
64 64
65 65
66static inline void checkedRead(FILE *fp, void *data, size_t nbytes) 66static inline void checkedRead(LLFILE *fp, void *data, size_t nbytes)
67{ 67{
68 if (fread(data, 1, nbytes, fp) != nbytes) 68 if (fread(data, 1, nbytes, fp) != nbytes)
69 { 69 {
@@ -72,7 +72,7 @@ static inline void checkedRead(FILE *fp, void *data, size_t nbytes)
72 } 72 }
73} 73}
74 74
75LLVOCacheEntry::LLVOCacheEntry(FILE *fp) 75LLVOCacheEntry::LLVOCacheEntry(LLFILE *fp)
76{ 76{
77 S32 size; 77 S32 size;
78 checkedRead(fp, &mLocalID, sizeof(U32)); 78 checkedRead(fp, &mLocalID, sizeof(U32));
@@ -153,7 +153,7 @@ void LLVOCacheEntry::dump() const
153 << llendl; 153 << llendl;
154} 154}
155 155
156static inline void checkedWrite(FILE *fp, const void *data, size_t nbytes) 156static inline void checkedWrite(LLFILE *fp, const void *data, size_t nbytes)
157{ 157{
158 if (fwrite(data, 1, nbytes, fp) != nbytes) 158 if (fwrite(data, 1, nbytes, fp) != nbytes)
159 { 159 {
@@ -161,7 +161,7 @@ static inline void checkedWrite(FILE *fp, const void *data, size_t nbytes)
161 } 161 }
162} 162}
163 163
164void LLVOCacheEntry::writeToFile(FILE *fp) const 164void LLVOCacheEntry::writeToFile(LLFILE *fp) const
165{ 165{
166 checkedWrite(fp, &mLocalID, sizeof(U32)); 166 checkedWrite(fp, &mLocalID, sizeof(U32));
167 checkedWrite(fp, &mCRC, sizeof(U32)); 167 checkedWrite(fp, &mCRC, sizeof(U32));
diff --git a/linden/indra/newview/llvocache.h b/linden/indra/newview/llvocache.h
index c994d4b..2432f22 100644
--- a/linden/indra/newview/llvocache.h
+++ b/linden/indra/newview/llvocache.h
@@ -45,7 +45,7 @@ class LLVOCacheEntry : public LLDLinked<LLVOCacheEntry>
45{ 45{
46public: 46public:
47 LLVOCacheEntry(U32 local_id, U32 crc, LLDataPackerBinaryBuffer &dp); 47 LLVOCacheEntry(U32 local_id, U32 crc, LLDataPackerBinaryBuffer &dp);
48 LLVOCacheEntry(FILE *fp); 48 LLVOCacheEntry(LLFILE *fp);
49 LLVOCacheEntry(); 49 LLVOCacheEntry();
50 ~LLVOCacheEntry(); 50 ~LLVOCacheEntry();
51 51
@@ -55,7 +55,7 @@ public:
55 S32 getCRCChangeCount() const { return mCRCChangeCount; } 55 S32 getCRCChangeCount() const { return mCRCChangeCount; }
56 56
57 void dump() const; 57 void dump() const;
58 void writeToFile(FILE *fp) const; 58 void writeToFile(LLFILE *fp) const;
59 void assignCRC(U32 crc, LLDataPackerBinaryBuffer &dp); 59 void assignCRC(U32 crc, LLDataPackerBinaryBuffer &dp);
60 LLDataPackerBinaryBuffer *getDP(U32 crc); 60 LLDataPackerBinaryBuffer *getDP(U32 crc);
61 void recordHit(); 61 void recordHit();
diff --git a/linden/indra/newview/llvograss.h b/linden/indra/newview/llvograss.h
index f5b0c5d..679f5dc 100644
--- a/linden/indra/newview/llvograss.h
+++ b/linden/indra/newview/llvograss.h
@@ -56,8 +56,8 @@ public:
56 U32 block_num, 56 U32 block_num,
57 const EObjectUpdateType update_type, 57 const EObjectUpdateType update_type,
58 LLDataPacker *dp); 58 LLDataPacker *dp);
59 static void import(FILE *file, LLMessageSystem *mesgsys, const LLVector3 &pos); 59 static void import(LLFILE *file, LLMessageSystem *mesgsys, const LLVector3 &pos);
60 /*virtual*/ void exportFile(FILE *file, const LLVector3 &position); 60 /*virtual*/ void exportFile(LLFILE *file, const LLVector3 &position);
61 61
62 void updateDrawable(BOOL force_damped); 62 void updateDrawable(BOOL force_damped);
63 63
diff --git a/linden/indra/newview/llvoiceclient.cpp b/linden/indra/newview/llvoiceclient.cpp
index 738eeac..7f63aca 100644
--- a/linden/indra/newview/llvoiceclient.cpp
+++ b/linden/indra/newview/llvoiceclient.cpp
@@ -268,7 +268,7 @@ LLIOPipe::EStatus LLVivoxProtocolParser::process_impl(
268 } 268 }
269 else 269 else
270 { 270 {
271 llinfos << "parsing: " << mInput.substr(start, delim - start) << llendl; 271 LL_INFOS("Voice") << "parsing: " << mInput.substr(start, delim - start) << LL_ENDL;
272 } 272 }
273 } 273 }
274 274
@@ -287,12 +287,12 @@ LLIOPipe::EStatus LLVivoxProtocolParser::process_impl(
287 if(start != 0) 287 if(start != 0)
288 mInput = mInput.substr(start); 288 mInput = mInput.substr(start);
289 289
290// llinfos << "at end, mInput is: " << mInput << llendl; 290 LL_DEBUGS("Voice") << "at end, mInput is: " << mInput << LL_ENDL;
291 291
292 if(!gVoiceClient->mConnected) 292 if(!gVoiceClient->mConnected)
293 { 293 {
294 // If voice has been disabled, we just want to close the socket. This does so. 294 // If voice has been disabled, we just want to close the socket. This does so.
295 llinfos << "returning STATUS_STOP" << llendl; 295 LL_INFOS("Voice") << "returning STATUS_STOP" << LL_ENDL;
296 return STATUS_STOP; 296 return STATUS_STOP;
297 } 297 }
298 298
@@ -366,17 +366,17 @@ void LLVivoxProtocolParser::StartTag(const char *tag, const char **attr)
366 } 366 }
367 } 367 }
368 } 368 }
369 //llinfos << tag << " (" << responseDepth << ")" << llendl; 369 LL_DEBUGS("Voice") << tag << " (" << responseDepth << ")" << LL_ENDL;
370 } 370 }
371 else 371 else
372 { 372 {
373 if (ignoringTags) 373 if (ignoringTags)
374 { 374 {
375 //llinfos << "ignoring tag " << tag << " (depth = " << responseDepth << ")" << llendl; 375 LL_DEBUGS("Voice") << "ignoring tag " << tag << " (depth = " << responseDepth << ")" << LL_ENDL;
376 } 376 }
377 else 377 else
378 { 378 {
379 //llinfos << tag << " (" << responseDepth << ")" << llendl; 379 LL_DEBUGS("Voice") << tag << " (" << responseDepth << ")" << LL_ENDL;
380 380
381 // Ignore the InputXml stuff so we don't get confused 381 // Ignore the InputXml stuff so we don't get confused
382 if (strcmp("InputXml", tag) == 0) 382 if (strcmp("InputXml", tag) == 0)
@@ -385,7 +385,7 @@ void LLVivoxProtocolParser::StartTag(const char *tag, const char **attr)
385 ignoreDepth = responseDepth; 385 ignoreDepth = responseDepth;
386 accumulateText = false; 386 accumulateText = false;
387 387
388 //llinfos << "starting ignore, ignoreDepth is " << ignoreDepth << llendl; 388 LL_DEBUGS("Voice") << "starting ignore, ignoreDepth is " << ignoreDepth << LL_ENDL;
389 } 389 }
390 else if (strcmp("CaptureDevices", tag) == 0) 390 else if (strcmp("CaptureDevices", tag) == 0)
391 { 391 {
@@ -413,18 +413,18 @@ void LLVivoxProtocolParser::EndTag(const char *tag)
413 { 413 {
414 if (ignoreDepth == responseDepth) 414 if (ignoreDepth == responseDepth)
415 { 415 {
416 //llinfos << "end of ignore" << llendl; 416 LL_DEBUGS("Voice") << "end of ignore" << LL_ENDL;
417 ignoringTags = false; 417 ignoringTags = false;
418 } 418 }
419 else 419 else
420 { 420 {
421 //llinfos << "ignoring tag " << tag << " (depth = " << responseDepth << ")" << llendl; 421 LL_DEBUGS("Voice") << "ignoring tag " << tag << " (depth = " << responseDepth << ")" << LL_ENDL;
422 } 422 }
423 } 423 }
424 424
425 if (!ignoringTags) 425 if (!ignoringTags)
426 { 426 {
427 //llinfos << "processing tag " << tag << " (depth = " << responseDepth << ")" << llendl; 427 LL_DEBUGS("Voice") << "processing tag " << tag << " (depth = " << responseDepth << ")" << LL_ENDL;
428 428
429 // Closing a tag. Finalize the text we've accumulated and reset 429 // Closing a tag. Finalize the text we've accumulated and reset
430 if (strcmp("ReturnCode", tag) == 0) 430 if (strcmp("ReturnCode", tag) == 0)
@@ -531,7 +531,7 @@ void LLVivoxProtocolParser::CharData(const char *buffer, int length)
531 531
532void LLVivoxProtocolParser::processResponse(std::string tag) 532void LLVivoxProtocolParser::processResponse(std::string tag)
533{ 533{
534 //llinfos << tag << llendl; 534 LL_DEBUGS("Voice") << tag << LL_ENDL;
535 535
536 if (isEvent) 536 if (isEvent)
537 { 537 {
@@ -700,9 +700,9 @@ private:
700 700
701void LLVoiceClientCapResponder::error(U32 status, const std::string& reason) 701void LLVoiceClientCapResponder::error(U32 status, const std::string& reason)
702{ 702{
703 llwarns << "LLVoiceClientCapResponder::error(" 703 LL_WARNS("Voice") << "LLVoiceClientCapResponder::error("
704 << status << ": " << reason << ")" 704 << status << ": " << reason << ")"
705 << llendl; 705 << LL_ENDL;
706} 706}
707 707
708void LLVoiceClientCapResponder::result(const LLSD& content) 708void LLVoiceClientCapResponder::result(const LLSD& content)
@@ -710,8 +710,8 @@ void LLVoiceClientCapResponder::result(const LLSD& content)
710 LLSD::map_const_iterator iter; 710 LLSD::map_const_iterator iter;
711 for(iter = content.beginMap(); iter != content.endMap(); ++iter) 711 for(iter = content.beginMap(); iter != content.endMap(); ++iter)
712 { 712 {
713 llinfos << "LLVoiceClientCapResponder::result got " 713 LL_DEBUGS("Voice") << "LLVoiceClientCapResponder::result got "
714 << iter->first << llendl; 714 << iter->first << LL_ENDL;
715 } 715 }
716 716
717 if ( content.has("voice_credentials") ) 717 if ( content.has("voice_credentials") )
@@ -833,6 +833,7 @@ LLVoiceClient::LLVoiceClient()
833 setCaptureDevice(captureDevice); 833 setCaptureDevice(captureDevice);
834 std::string renderDevice = gSavedSettings.getString("VoiceOutputAudioDevice"); 834 std::string renderDevice = gSavedSettings.getString("VoiceOutputAudioDevice");
835 setRenderDevice(renderDevice); 835 setRenderDevice(renderDevice);
836 mLipSyncEnabled = gSavedSettings.getBOOL("LipSyncEnabled");
836 837
837 mTuningMode = false; 838 mTuningMode = false;
838 mTuningEnergy = 0.0f; 839 mTuningEnergy = 0.0f;
@@ -917,7 +918,7 @@ bool LLVoiceClient::writeString(const std::string &str)
917 apr_size_t size = (apr_size_t)str.size(); 918 apr_size_t size = (apr_size_t)str.size();
918 apr_size_t written = size; 919 apr_size_t written = size;
919 920
920// llinfos << "sending: " << str << llendl; 921 LL_DEBUGS("Voice") << "sending: " << str << LL_ENDL;
921 922
922 // MBW -- XXX -- check return code - sockets will fail (broken, etc.) 923 // MBW -- XXX -- check return code - sockets will fail (broken, etc.)
923 err = apr_socket_send( 924 err = apr_socket_send(
@@ -940,7 +941,7 @@ bool LLVoiceClient::writeString(const std::string &str)
940 { 941 {
941 // Assume any socket error means something bad. For now, just close the socket. 942 // Assume any socket error means something bad. For now, just close the socket.
942 char buf[MAX_STRING]; 943 char buf[MAX_STRING];
943 llwarns << "apr error " << err << " ("<< apr_strerror(err, buf, MAX_STRING) << ") sending data to vivox daemon." << llendl; 944 LL_WARNS("Voice") << "apr error " << err << " ("<< apr_strerror(err, buf, MAX_STRING) << ") sending data to vivox daemon." << LL_ENDL;
944 daemonDied(); 945 daemonDied();
945 } 946 }
946 } 947 }
@@ -964,7 +965,7 @@ void LLVoiceClient::connectorCreate()
964 965
965 if(savedLogLevel != "-1") 966 if(savedLogLevel != "-1")
966 { 967 {
967 llinfos << "creating connector with logging enabled" << llendl; 968 LL_DEBUGS("Voice") << "creating connector with logging enabled" << LL_ENDL;
968 loglevel = "10"; 969 loglevel = "10";
969 logpath = gDirUtilp->getExpandedFilename(LL_PATH_LOGS, ""); 970 logpath = gDirUtilp->getExpandedFilename(LL_PATH_LOGS, "");
970 } 971 }
@@ -1013,15 +1014,9 @@ void LLVoiceClient::userAuthorized(const std::string& firstName, const std::stri
1013 mAccountDisplayName += " "; 1014 mAccountDisplayName += " ";
1014 mAccountDisplayName += lastName; 1015 mAccountDisplayName += lastName;
1015 1016
1016 llinfos << "name \"" << mAccountDisplayName << "\" , ID " << agentID << llendl; 1017 LL_INFOS("Voice") << "name \"" << mAccountDisplayName << "\" , ID " << agentID << LL_ENDL;
1017 1018
1018 std::string gridname = gGridName; 1019 sConnectingToAgni = LLViewerLogin::getInstance()->isInProductionGrid();
1019 LLString::toLower(gridname);
1020 if((gGridChoice == GRID_INFO_AGNI) ||
1021 ((gGridChoice == GRID_INFO_OTHER) && (gridname.find("agni") != std::string::npos)))
1022 {
1023 sConnectingToAgni = true;
1024 }
1025 1020
1026 // MBW -- XXX -- Enable this when the bhd.vivox.com server gets a real ssl cert. 1021 // MBW -- XXX -- Enable this when the bhd.vivox.com server gets a real ssl cert.
1027 if(sConnectingToAgni) 1022 if(sConnectingToAgni)
@@ -1064,13 +1059,13 @@ void LLVoiceClient::login(
1064 if((getState() >= stateLoggingIn) && (getState() < stateLoggedOut)) 1059 if((getState() >= stateLoggingIn) && (getState() < stateLoggedOut))
1065 { 1060 {
1066 // Already logged in. This is an internal error. 1061 // Already logged in. This is an internal error.
1067 llerrs << "called from wrong state." << llendl; 1062 LL_ERRS("Voice") << "Can't login again. Called from wrong state." << LL_ENDL;
1068 } 1063 }
1069 else if ( accountName != mAccountName ) 1064 else if ( accountName != mAccountName )
1070 { 1065 {
1071 //TODO: error? 1066 //TODO: error?
1072 llinfos << "Wrong account name! " << accountName 1067 LL_WARNS("Voice") << "Wrong account name! " << accountName
1073 << " instead of " << mAccountName << llendl; 1068 << " instead of " << mAccountName << LL_ENDL;
1074 } 1069 }
1075 else 1070 else
1076 { 1071 {
@@ -1166,7 +1161,7 @@ const char *LLVoiceClientStatusObserver::status2string(LLVoiceClientStatusObserv
1166 1161
1167void LLVoiceClient::setState(state inState) 1162void LLVoiceClient::setState(state inState)
1168{ 1163{
1169 llinfos << "entering state " << state2string(inState) << llendl; 1164 LL_DEBUGS("Voice") << "entering state " << state2string(inState) << LL_ENDL;
1170 1165
1171 mState = inState; 1166 mState = inState;
1172} 1167}
@@ -1187,7 +1182,7 @@ void LLVoiceClient::stateMachine()
1187 if(!mConnected) 1182 if(!mConnected)
1188 { 1183 {
1189 // if voice was turned off after the daemon was launched but before we could connect to it, we may need to issue a kill. 1184 // if voice was turned off after the daemon was launched but before we could connect to it, we may need to issue a kill.
1190 llinfos << "Disabling voice before connection to daemon, terminating." << llendl; 1185 LL_INFOS("Voice") << "Disabling voice before connection to daemon, terminating." << LL_ENDL;
1191 killGateway(); 1186 killGateway();
1192 } 1187 }
1193 1188
@@ -1212,7 +1207,7 @@ void LLVoiceClient::stateMachine()
1212 std::string regionName = region->getName(); 1207 std::string regionName = region->getName();
1213 std::string capURI = region->getCapability("ParcelVoiceInfoRequest"); 1208 std::string capURI = region->getCapability("ParcelVoiceInfoRequest");
1214 1209
1215// llinfos << "Region name = \"" << regionName <<"\", " << "parcel local ID = " << parcelLocalID << llendl; 1210 LL_DEBUGS("Voice") << "Region name = \"" << regionName <<"\", " << "parcel local ID = " << parcelLocalID << LL_ENDL;
1216 1211
1217 // The region name starts out empty and gets filled in later. 1212 // The region name starts out empty and gets filled in later.
1218 // Also, the cap gets filled in a short time after the region cross, but a little too late for our purposes. 1213 // Also, the cap gets filled in a short time after the region cross, but a little too late for our purposes.
@@ -1276,7 +1271,7 @@ void LLVoiceClient::stateMachine()
1276 args += " -ll "; 1271 args += " -ll ";
1277 args += loglevel; 1272 args += loglevel;
1278 1273
1279// llinfos << "Args for SLVoice: " << args << llendl; 1274 LL_DEBUGS("Voice") << "Args for SLVoice: " << args << LL_ENDL;
1280 1275
1281#if LL_WINDOWS 1276#if LL_WINDOWS
1282 PROCESS_INFORMATION pinfo; 1277 PROCESS_INFORMATION pinfo;
@@ -1348,7 +1343,7 @@ void LLVoiceClient::stateMachine()
1348 } 1343 }
1349 else 1344 else
1350 { 1345 {
1351 llinfos << exe_path << "not found." << llendl 1346 LL_INFOS("Voice") << exe_path << "not found." << LL_ENDL
1352 } 1347 }
1353 } 1348 }
1354 else 1349 else
@@ -1375,7 +1370,7 @@ void LLVoiceClient::stateMachine()
1375 break; 1370 break;
1376 1371
1377 case stateDaemonLaunched: 1372 case stateDaemonLaunched:
1378// llinfos << "Connecting to vivox daemon" << llendl; 1373 LL_DEBUGS("Voice") << "Connecting to vivox daemon" << LL_ENDL;
1379 if(mUpdateTimer.hasExpired()) 1374 if(mUpdateTimer.hasExpired())
1380 { 1375 {
1381 mUpdateTimer.setTimerExpirySec(CONNECT_THROTTLE_SECONDS); 1376 mUpdateTimer.setTimerExpirySec(CONNECT_THROTTLE_SECONDS);
@@ -1532,7 +1527,7 @@ void LLVoiceClient::stateMachine()
1532 1527
1533 if(mTuningMicVolumeDirty) 1528 if(mTuningMicVolumeDirty)
1534 { 1529 {
1535 llinfos << "setting tuning mic level to " << mTuningMicVolume << llendl; 1530 LL_INFOS("Voice") << "setting tuning mic level to " << mTuningMicVolume << LL_ENDL;
1536 stream 1531 stream
1537 << "<Request requestId=\"" << mCommandCookie++ << "\" action=\"Aux.SetMicLevel.1\">" 1532 << "<Request requestId=\"" << mCommandCookie++ << "\" action=\"Aux.SetMicLevel.1\">"
1538 << "<Level>" << mTuningMicVolume << "</Level>" 1533 << "<Level>" << mTuningMicVolume << "</Level>"
@@ -1583,12 +1578,12 @@ void LLVoiceClient::stateMachine()
1583 1578
1584 if(mLoginRetryCount > MAX_LOGIN_RETRIES) 1579 if(mLoginRetryCount > MAX_LOGIN_RETRIES)
1585 { 1580 {
1586 llinfos << "too many login retries, giving up." << llendl; 1581 LL_WARNS("Voice") << "too many login retries, giving up." << LL_ENDL;
1587 setState(stateLoginFailed); 1582 setState(stateLoginFailed);
1588 } 1583 }
1589 else 1584 else
1590 { 1585 {
1591 llinfos << "will retry login in " << LOGIN_RETRY_SECONDS << " seconds." << llendl; 1586 LL_INFOS("Voice") << "will retry login in " << LOGIN_RETRY_SECONDS << " seconds." << LL_ENDL;
1592 mUpdateTimer.start(); 1587 mUpdateTimer.start();
1593 mUpdateTimer.setTimerExpirySec(LOGIN_RETRY_SECONDS); 1588 mUpdateTimer.setTimerExpirySec(LOGIN_RETRY_SECONDS);
1594 setState(stateLoginRetryWait); 1589 setState(stateLoginRetryWait);
@@ -1848,7 +1843,7 @@ void LLVoiceClient::stateMachine()
1848 1843
1849 case stateJoinSessionFailed: 1844 case stateJoinSessionFailed:
1850 // Transition to error state. Send out any notifications here. 1845 // Transition to error state. Send out any notifications here.
1851 llwarns << "stateJoinSessionFailed: (" << mVivoxErrorStatusCode << "): " << mVivoxErrorStatusString << llendl; 1846 LL_WARNS("Voice") << "stateJoinSessionFailed: (" << mVivoxErrorStatusCode << "): " << mVivoxErrorStatusString << LL_ENDL;
1852 notifyStatusObservers(LLVoiceClientStatusObserver::ERROR_UNKNOWN); 1847 notifyStatusObservers(LLVoiceClientStatusObserver::ERROR_UNKNOWN);
1853 setState(stateJoinSessionFailedWaiting); 1848 setState(stateJoinSessionFailedWaiting);
1854 break; 1849 break;
@@ -1868,8 +1863,7 @@ void LLVoiceClient::stateMachine()
1868 1863
1869 case stateMicTuningNoLogin: 1864 case stateMicTuningNoLogin:
1870 // *TODO: Implement me. 1865 // *TODO: Implement me.
1871 llwarns << "stateMicTuningNoLogin not handled" 1866 LL_WARNS("Voice") << "stateMicTuningNoLogin not handled" << LL_ENDL;
1872 << llendl;
1873 break; 1867 break;
1874 } 1868 }
1875 1869
@@ -1938,7 +1932,7 @@ void LLVoiceClient::channelGetListSendMessage()
1938 1932
1939void LLVoiceClient::sessionCreateSendMessage() 1933void LLVoiceClient::sessionCreateSendMessage()
1940{ 1934{
1941 llinfos << "requesting join: " << mNextSessionURI << llendl; 1935 LL_DEBUGS("Voice") << "requesting join: " << mNextSessionURI << LL_ENDL;
1942 1936
1943 mSessionURI = mNextSessionURI; 1937 mSessionURI = mNextSessionURI;
1944 mNonSpatialChannel = !mNextSessionSpatial; 1938 mNonSpatialChannel = !mNextSessionSpatial;
@@ -1978,7 +1972,7 @@ void LLVoiceClient::sessionCreateSendMessage()
1978 1972
1979void LLVoiceClient::sessionConnectSendMessage() 1973void LLVoiceClient::sessionConnectSendMessage()
1980{ 1974{
1981 llinfos << "connecting to session handle: " << mNextSessionHandle << llendl; 1975 LL_DEBUGS("Voice") << "connecting to session handle: " << mNextSessionHandle << LL_ENDL;
1982 1976
1983 mSessionHandle = mNextSessionHandle; 1977 mSessionHandle = mNextSessionHandle;
1984 mSessionURI = mNextP2PSessionURI; 1978 mSessionURI = mNextP2PSessionURI;
@@ -2007,7 +2001,7 @@ void LLVoiceClient::sessionTerminate()
2007 2001
2008void LLVoiceClient::sessionTerminateSendMessage() 2002void LLVoiceClient::sessionTerminateSendMessage()
2009{ 2003{
2010 llinfos << "leaving session: " << mSessionURI << llendl; 2004 LL_DEBUGS("Voice") << "leaving session: " << mSessionURI << LL_ENDL;
2011 2005
2012 switch(getState()) 2006 switch(getState())
2013 { 2007 {
@@ -2026,7 +2020,7 @@ void LLVoiceClient::sessionTerminateSendMessage()
2026 } 2020 }
2027 else 2021 else
2028 { 2022 {
2029 llwarns << "called with no session handle" << llendl; 2023 LL_WARNS("Voice") << "called with no session handle" << LL_ENDL;
2030 setState(stateSessionTerminated); 2024 setState(stateSessionTerminated);
2031 } 2025 }
2032 break; 2026 break;
@@ -2036,14 +2030,14 @@ void LLVoiceClient::sessionTerminateSendMessage()
2036 break; 2030 break;
2037 2031
2038 default: 2032 default:
2039 llwarns << "called from unknown state" << llendl; 2033 LL_WARNS("Voice") << "called from unknown state" << LL_ENDL;
2040 break; 2034 break;
2041 } 2035 }
2042} 2036}
2043 2037
2044void LLVoiceClient::sessionTerminateByHandle(std::string &sessionHandle) 2038void LLVoiceClient::sessionTerminateByHandle(std::string &sessionHandle)
2045{ 2039{
2046 llinfos << "Sending Session.Terminate with handle " << sessionHandle << llendl; 2040 LL_DEBUGS("Voice") << "Sending Session.Terminate with handle " << sessionHandle << LL_ENDL;
2047 2041
2048 std::ostringstream stream; 2042 std::ostringstream stream;
2049 stream 2043 stream
@@ -2078,14 +2072,14 @@ void LLVoiceClient::getRenderDevicesSendMessage()
2078void LLVoiceClient::clearCaptureDevices() 2072void LLVoiceClient::clearCaptureDevices()
2079{ 2073{
2080 // MBW -- XXX -- do something here 2074 // MBW -- XXX -- do something here
2081 llinfos << "called" << llendl; 2075 LL_DEBUGS("Voice") << "called" << LL_ENDL;
2082 mCaptureDevices.clear(); 2076 mCaptureDevices.clear();
2083} 2077}
2084 2078
2085void LLVoiceClient::addCaptureDevice(const std::string& name) 2079void LLVoiceClient::addCaptureDevice(const std::string& name)
2086{ 2080{
2087 // MBW -- XXX -- do something here 2081 // MBW -- XXX -- do something here
2088 llinfos << name << llendl; 2082 LL_DEBUGS("Voice") << name << LL_ENDL;
2089 2083
2090 mCaptureDevices.push_back(name); 2084 mCaptureDevices.push_back(name);
2091} 2085}
@@ -2118,14 +2112,14 @@ void LLVoiceClient::setCaptureDevice(const std::string& name)
2118void LLVoiceClient::clearRenderDevices() 2112void LLVoiceClient::clearRenderDevices()
2119{ 2113{
2120 // MBW -- XXX -- do something here 2114 // MBW -- XXX -- do something here
2121 llinfos << "called" << llendl; 2115 LL_DEBUGS("Voice") << "called" << LL_ENDL;
2122 mRenderDevices.clear(); 2116 mRenderDevices.clear();
2123} 2117}
2124 2118
2125void LLVoiceClient::addRenderDevice(const std::string& name) 2119void LLVoiceClient::addRenderDevice(const std::string& name)
2126{ 2120{
2127 // MBW -- XXX -- do something here 2121 // MBW -- XXX -- do something here
2128 llinfos << name << llendl; 2122 LL_DEBUGS("Voice") << name << LL_ENDL;
2129 mRenderDevices.push_back(name); 2123 mRenderDevices.push_back(name);
2130} 2124}
2131 2125
@@ -2209,7 +2203,7 @@ void LLVoiceClient::tuningRenderStopSendMessage()
2209 2203
2210void LLVoiceClient::tuningCaptureStartSendMessage(int duration) 2204void LLVoiceClient::tuningCaptureStartSendMessage(int duration)
2211{ 2205{
2212 llinfos << "sending CaptureAudioStart" << llendl; 2206 LL_DEBUGS("Voice") << "sending CaptureAudioStart" << LL_ENDL;
2213 2207
2214 std::ostringstream stream; 2208 std::ostringstream stream;
2215 stream 2209 stream
@@ -2222,7 +2216,7 @@ void LLVoiceClient::tuningCaptureStartSendMessage(int duration)
2222 2216
2223void LLVoiceClient::tuningCaptureStopSendMessage() 2217void LLVoiceClient::tuningCaptureStopSendMessage()
2224{ 2218{
2225 llinfos << "sending CaptureAudioStop" << llendl; 2219 LL_DEBUGS("Voice") << "sending CaptureAudioStop" << LL_ENDL;
2226 2220
2227 std::ostringstream stream; 2221 std::ostringstream stream;
2228 stream 2222 stream
@@ -2295,7 +2289,7 @@ void LLVoiceClient::refreshDeviceLists(bool clearCurrentList)
2295void LLVoiceClient::daemonDied() 2289void LLVoiceClient::daemonDied()
2296{ 2290{
2297 // The daemon died, so the connection is gone. Reset everything and start over. 2291 // The daemon died, so the connection is gone. Reset everything and start over.
2298 llwarns << "Connection to vivox daemon lost. Resetting state."<< llendl; 2292 LL_WARNS("Voice") << "Connection to vivox daemon lost. Resetting state."<< LL_ENDL;
2299 2293
2300 closeSocket(); 2294 closeSocket();
2301 removeAllParticipants(); 2295 removeAllParticipants();
@@ -2331,7 +2325,7 @@ void LLVoiceClient::sendPositionalUpdate(void)
2331 u = mAvatarRot.getUpRow(); 2325 u = mAvatarRot.getUpRow();
2332 a = mAvatarRot.getFwdRow(); 2326 a = mAvatarRot.getFwdRow();
2333 2327
2334// llinfos << "Sending speaker position " << mSpeakerPosition << llendl; 2328 LL_DEBUGS("Voice") << "Sending speaker position " << mAvatarPosition << LL_ENDL;
2335 2329
2336 stream 2330 stream
2337 << "<Position>" 2331 << "<Position>"
@@ -2394,7 +2388,7 @@ void LLVoiceClient::sendPositionalUpdate(void)
2394 u = earRot.getUpRow(); 2388 u = earRot.getUpRow();
2395 a = earRot.getFwdRow(); 2389 a = earRot.getFwdRow();
2396 2390
2397// llinfos << "Sending listener position " << mListenerPosition << llendl; 2391 LL_DEBUGS("Voice") << "Sending listener position " << earPosition << LL_ENDL;
2398 2392
2399 stream 2393 stream
2400 << "<Position>" 2394 << "<Position>"
@@ -2434,7 +2428,7 @@ void LLVoiceClient::sendPositionalUpdate(void)
2434 // NOTE that the state of "PTT" is the inverse of "local mute". 2428 // NOTE that the state of "PTT" is the inverse of "local mute".
2435 // (i.e. when PTT is true, we send a mute command with "false", and vice versa) 2429 // (i.e. when PTT is true, we send a mute command with "false", and vice versa)
2436 2430
2437// llinfos << "Sending MuteLocalMic command with parameter " << (mPTT?"false":"true") << llendl; 2431 LL_DEBUGS("Voice") << "Sending MuteLocalMic command with parameter " << (mPTT?"false":"true") << LL_ENDL;
2438 2432
2439 stream << "<Request requestId=\"" << mCommandCookie++ << "\" action=\"Connector.MuteLocalMic.1\">" 2433 stream << "<Request requestId=\"" << mCommandCookie++ << "\" action=\"Connector.MuteLocalMic.1\">"
2440 << "<ConnectorHandle>" << mConnectorHandle << "</ConnectorHandle>" 2434 << "<ConnectorHandle>" << mConnectorHandle << "</ConnectorHandle>"
@@ -2455,7 +2449,7 @@ void LLVoiceClient::sendPositionalUpdate(void)
2455 { 2449 {
2456 int volume = p->mOnMuteList?0:p->mUserVolume; 2450 int volume = p->mOnMuteList?0:p->mUserVolume;
2457 2451
2458 llinfos << "Setting volume for avatar " << p->mAvatarID << " to " << volume << llendl; 2452 LL_INFOS("Voice") << "Setting volume for avatar " << p->mAvatarID << " to " << volume << LL_ENDL;
2459 2453
2460 // Send a mute/unumte command for the user (actually "volume for me"). 2454 // Send a mute/unumte command for the user (actually "volume for me").
2461 stream << "<Request requestId=\"" << mCommandCookie++ << "\" action=\"Session.SetParticipantVolumeForMe.1\">" 2455 stream << "<Request requestId=\"" << mCommandCookie++ << "\" action=\"Session.SetParticipantVolumeForMe.1\">"
@@ -2472,7 +2466,7 @@ void LLVoiceClient::sendPositionalUpdate(void)
2472 if(mSpeakerMuteDirty) 2466 if(mSpeakerMuteDirty)
2473 { 2467 {
2474 const char *muteval = ((mSpeakerVolume == -100)?"true":"false"); 2468 const char *muteval = ((mSpeakerVolume == -100)?"true":"false");
2475 llinfos << "Setting speaker mute to " << muteval << llendl; 2469 LL_INFOS("Voice") << "Setting speaker mute to " << muteval << LL_ENDL;
2476 2470
2477 stream << "<Request requestId=\"" << mCommandCookie++ << "\" action=\"Connector.MuteLocalSpeaker.1\">" 2471 stream << "<Request requestId=\"" << mCommandCookie++ << "\" action=\"Connector.MuteLocalSpeaker.1\">"
2478 << "<ConnectorHandle>" << mConnectorHandle << "</ConnectorHandle>" 2472 << "<ConnectorHandle>" << mConnectorHandle << "</ConnectorHandle>"
@@ -2482,7 +2476,7 @@ void LLVoiceClient::sendPositionalUpdate(void)
2482 2476
2483 if(mSpeakerVolumeDirty) 2477 if(mSpeakerVolumeDirty)
2484 { 2478 {
2485 llinfos << "Setting speaker volume to " << mSpeakerVolume << llendl; 2479 LL_INFOS("Voice") << "Setting speaker volume to " << mSpeakerVolume << LL_ENDL;
2486 2480
2487 stream << "<Request requestId=\"" << mCommandCookie++ << "\" action=\"Connector.SetLocalSpeakerVolume.1\">" 2481 stream << "<Request requestId=\"" << mCommandCookie++ << "\" action=\"Connector.SetLocalSpeakerVolume.1\">"
2488 << "<ConnectorHandle>" << mConnectorHandle << "</ConnectorHandle>" 2482 << "<ConnectorHandle>" << mConnectorHandle << "</ConnectorHandle>"
@@ -2492,7 +2486,7 @@ void LLVoiceClient::sendPositionalUpdate(void)
2492 2486
2493 if(mMicVolumeDirty) 2487 if(mMicVolumeDirty)
2494 { 2488 {
2495 llinfos << "Setting mic volume to " << mMicVolume << llendl; 2489 LL_INFOS("Voice") << "Setting mic volume to " << mMicVolume << LL_ENDL;
2496 2490
2497 stream << "<Request requestId=\"" << mCommandCookie++ << "\" action=\"Connector.SetLocalMicVolume.1\">" 2491 stream << "<Request requestId=\"" << mCommandCookie++ << "\" action=\"Connector.SetLocalMicVolume.1\">"
2498 << "<ConnectorHandle>" << mConnectorHandle << "</ConnectorHandle>" 2492 << "<ConnectorHandle>" << mConnectorHandle << "</ConnectorHandle>"
@@ -2529,7 +2523,7 @@ void LLVoiceClient::sendPositionalUpdate(void)
2529 2523
2530void LLVoiceClient::buildSetCaptureDevice(std::ostringstream &stream) 2524void LLVoiceClient::buildSetCaptureDevice(std::ostringstream &stream)
2531{ 2525{
2532 llinfos << "Setting input device = \"" << mCaptureDevice << "\"" << llendl; 2526 LL_DEBUGS("Voice") << "Setting input device = \"" << mCaptureDevice << "\"" << LL_ENDL;
2533 2527
2534 stream 2528 stream
2535 << "<Request requestId=\"" << mCommandCookie++ << "\" action=\"Aux.SetCaptureDevice.1\">" 2529 << "<Request requestId=\"" << mCommandCookie++ << "\" action=\"Aux.SetCaptureDevice.1\">"
@@ -2540,7 +2534,7 @@ void LLVoiceClient::buildSetCaptureDevice(std::ostringstream &stream)
2540 2534
2541void LLVoiceClient::buildSetRenderDevice(std::ostringstream &stream) 2535void LLVoiceClient::buildSetRenderDevice(std::ostringstream &stream)
2542{ 2536{
2543 llinfos << "Setting output device = \"" << mRenderDevice << "\"" << llendl; 2537 LL_DEBUGS("Voice") << "Setting output device = \"" << mRenderDevice << "\"" << LL_ENDL;
2544 2538
2545 stream 2539 stream
2546 << "<Request requestId=\"" << mCommandCookie++ << "\" action=\"Aux.SetRenderDevice.1\">" 2540 << "<Request requestId=\"" << mCommandCookie++ << "\" action=\"Aux.SetRenderDevice.1\">"
@@ -2556,7 +2550,7 @@ void LLVoiceClient::connectorCreateResponse(int statusCode, std::string &statusS
2556{ 2550{
2557 if(statusCode != 0) 2551 if(statusCode != 0)
2558 { 2552 {
2559 llwarns << "Connector.Create response failure: " << statusString << llendl; 2553 LL_WARNS("Voice") << "Connector.Create response failure: " << statusString << LL_ENDL;
2560 setState(stateConnectorFailed); 2554 setState(stateConnectorFailed);
2561 } 2555 }
2562 else 2556 else
@@ -2572,19 +2566,19 @@ void LLVoiceClient::connectorCreateResponse(int statusCode, std::string &statusS
2572 2566
2573void LLVoiceClient::loginResponse(int statusCode, std::string &statusString, std::string &accountHandle) 2567void LLVoiceClient::loginResponse(int statusCode, std::string &statusString, std::string &accountHandle)
2574{ 2568{
2575 llinfos << "Account.Login response (" << statusCode << "): " << statusString << llendl; 2569 LL_DEBUGS("Voice") << "Account.Login response (" << statusCode << "): " << statusString << LL_ENDL;
2576 2570
2577 // Status code of 20200 means "bad password". We may want to special-case that at some point. 2571 // Status code of 20200 means "bad password". We may want to special-case that at some point.
2578 2572
2579 if ( statusCode == 401 ) 2573 if ( statusCode == 401 )
2580 { 2574 {
2581 // Login failure which is probably caused by the delay after a user's password being updated. 2575 // Login failure which is probably caused by the delay after a user's password being updated.
2582 llinfos << "Account.Login response failure (" << statusCode << "): " << statusString << llendl; 2576 LL_INFOS("Voice") << "Account.Login response failure (" << statusCode << "): " << statusString << LL_ENDL;
2583 setState(stateLoginRetry); 2577 setState(stateLoginRetry);
2584 } 2578 }
2585 else if(statusCode != 0) 2579 else if(statusCode != 0)
2586 { 2580 {
2587 llwarns << "Account.Login response failure (" << statusCode << "): " << statusString << llendl; 2581 LL_WARNS("Voice") << "Account.Login response failure (" << statusCode << "): " << statusString << LL_ENDL;
2588 setState(stateLoginFailed); 2582 setState(stateLoginFailed);
2589 } 2583 }
2590 else 2584 else
@@ -2603,7 +2597,7 @@ void LLVoiceClient::channelGetListResponse(int statusCode, std::string &statusSt
2603{ 2597{
2604 if(statusCode != 0) 2598 if(statusCode != 0)
2605 { 2599 {
2606 llwarns << "Account.ChannelGetList response failure: " << statusString << llendl; 2600 LL_WARNS("Voice") << "Account.ChannelGetList response failure: " << statusString << LL_ENDL;
2607 switchChannel(); 2601 switchChannel();
2608 } 2602 }
2609 else 2603 else
@@ -2613,12 +2607,12 @@ void LLVoiceClient::channelGetListResponse(int statusCode, std::string &statusSt
2613 if(uri.empty()) 2607 if(uri.empty())
2614 { 2608 {
2615 // Lookup failed, can't join a channel for this area. 2609 // Lookup failed, can't join a channel for this area.
2616 llinfos << "failed to map channel name: " << mChannelName << llendl; 2610 LL_INFOS("Voice") << "failed to map channel name: " << mChannelName << LL_ENDL;
2617 } 2611 }
2618 else 2612 else
2619 { 2613 {
2620 // We have a sip URL for this area. 2614 // We have a sip URL for this area.
2621 llinfos << "mapped channel " << mChannelName << " to URI "<< uri << llendl; 2615 LL_INFOS("Voice") << "mapped channel " << mChannelName << " to URI "<< uri << LL_ENDL;
2622 } 2616 }
2623 2617
2624 // switchChannel with an empty uri string will do the right thing (leave channel and not rejoin) 2618 // switchChannel with an empty uri string will do the right thing (leave channel and not rejoin)
@@ -2630,13 +2624,13 @@ void LLVoiceClient::sessionCreateResponse(int statusCode, std::string &statusStr
2630{ 2624{
2631 if(statusCode != 0) 2625 if(statusCode != 0)
2632 { 2626 {
2633 llwarns << "Session.Create response failure (" << statusCode << "): " << statusString << llendl; 2627 LL_WARNS("Voice") << "Session.Create response failure (" << statusCode << "): " << statusString << LL_ENDL;
2634// if(statusCode == 1015) 2628// if(statusCode == 1015)
2635// { 2629// {
2636// if(getState() == stateJoiningSession) 2630// if(getState() == stateJoiningSession)
2637// { 2631// {
2638// // this happened during a real join. Going to sessionTerminated should cause a retry in appropriate cases. 2632// // this happened during a real join. Going to sessionTerminated should cause a retry in appropriate cases.
2639// llwarns << "session handle \"" << sessionHandle << "\", mSessionStateEventHandle \"" << mSessionStateEventHandle << "\""<< llendl; 2633// LL_WARNS("Voice") << "session handle \"" << sessionHandle << "\", mSessionStateEventHandle \"" << mSessionStateEventHandle << "\""<< LL_ENDL;
2640// if(!sessionHandle.empty()) 2634// if(!sessionHandle.empty())
2641// { 2635// {
2642// // This session is bad. Terminate it. 2636// // This session is bad. Terminate it.
@@ -2658,7 +2652,7 @@ void LLVoiceClient::sessionCreateResponse(int statusCode, std::string &statusStr
2658// else 2652// else
2659// { 2653// {
2660// // We didn't think we were in the middle of a join. Don't change state. 2654// // We didn't think we were in the middle of a join. Don't change state.
2661// llwarns << "Not in stateJoiningSession, ignoring" << llendl; 2655// LL_WARNS("Voice") << "Not in stateJoiningSession, ignoring" << LL_ENDL;
2662// } 2656// }
2663// } 2657// }
2664// else 2658// else
@@ -2670,7 +2664,7 @@ void LLVoiceClient::sessionCreateResponse(int statusCode, std::string &statusStr
2670 } 2664 }
2671 else 2665 else
2672 { 2666 {
2673 llinfos << "Session.Create response received (success), session handle is " << sessionHandle << llendl; 2667 LL_DEBUGS("Voice") << "Session.Create response received (success), session handle is " << sessionHandle << LL_ENDL;
2674 if(getState() == stateJoiningSession) 2668 if(getState() == stateJoiningSession)
2675 { 2669 {
2676 // This is also grabbed in the SessionStateChangeEvent handler, but it might be useful to have it early... 2670 // This is also grabbed in the SessionStateChangeEvent handler, but it might be useful to have it early...
@@ -2688,10 +2682,10 @@ void LLVoiceClient::sessionConnectResponse(int statusCode, std::string &statusSt
2688{ 2682{
2689 if(statusCode != 0) 2683 if(statusCode != 0)
2690 { 2684 {
2691 llwarns << "Session.Connect response failure (" << statusCode << "): " << statusString << llendl; 2685 LL_WARNS("Voice") << "Session.Connect response failure (" << statusCode << "): " << statusString << LL_ENDL;
2692// if(statusCode == 1015) 2686// if(statusCode == 1015)
2693// { 2687// {
2694// llwarns << "terminating existing session" << llendl; 2688// LL_WARNS("Voice") << "terminating existing session" << LL_ENDL;
2695// sessionTerminate(); 2689// sessionTerminate();
2696// } 2690// }
2697// else 2691// else
@@ -2703,7 +2697,7 @@ void LLVoiceClient::sessionConnectResponse(int statusCode, std::string &statusSt
2703 } 2697 }
2704 else 2698 else
2705 { 2699 {
2706 llinfos << "Session.Connect response received (success)" << llendl; 2700 LL_DEBUGS("Voice") << "Session.Connect response received (success)" << LL_ENDL;
2707 } 2701 }
2708} 2702}
2709 2703
@@ -2711,7 +2705,7 @@ void LLVoiceClient::sessionTerminateResponse(int statusCode, std::string &status
2711{ 2705{
2712 if(statusCode != 0) 2706 if(statusCode != 0)
2713 { 2707 {
2714 llwarns << "Session.Terminate response failure: (" << statusCode << "): " << statusString << llendl; 2708 LL_WARNS("Voice") << "Session.Terminate response failure: (" << statusCode << "): " << statusString << LL_ENDL;
2715 if(getState() == stateLeavingSession) 2709 if(getState() == stateLeavingSession)
2716 { 2710 {
2717 // This is probably "(404): Server reporting Failure. Not a member of this conference." 2711 // This is probably "(404): Server reporting Failure. Not a member of this conference."
@@ -2726,7 +2720,7 @@ void LLVoiceClient::logoutResponse(int statusCode, std::string &statusString)
2726{ 2720{
2727 if(statusCode != 0) 2721 if(statusCode != 0)
2728 { 2722 {
2729 llwarns << "Account.Logout response failure: " << statusString << llendl; 2723 LL_WARNS("Voice") << "Account.Logout response failure: " << statusString << LL_ENDL;
2730 // MBW -- XXX -- Should this ever fail? do we care if it does? 2724 // MBW -- XXX -- Should this ever fail? do we care if it does?
2731 } 2725 }
2732 2726
@@ -2740,7 +2734,7 @@ void LLVoiceClient::connectorShutdownResponse(int statusCode, std::string &statu
2740{ 2734{
2741 if(statusCode != 0) 2735 if(statusCode != 0)
2742 { 2736 {
2743 llwarns << "Connector.InitiateShutdown response failure: " << statusString << llendl; 2737 LL_WARNS("Voice") << "Connector.InitiateShutdown response failure: " << statusString << LL_ENDL;
2744 // MBW -- XXX -- Should this ever fail? do we care if it does? 2738 // MBW -- XXX -- Should this ever fail? do we care if it does?
2745 } 2739 }
2746 2740
@@ -2764,7 +2758,7 @@ void LLVoiceClient::sessionStateChangeEvent(
2764 switch(state) 2758 switch(state)
2765 { 2759 {
2766 case 4: // I see this when joining the session 2760 case 4: // I see this when joining the session
2767 llinfos << "joined session " << uriString << ", name " << nameString << " handle " << mNextSessionHandle << llendl; 2761 LL_INFOS("Voice") << "joined session " << uriString << ", name " << nameString << " handle " << mNextSessionHandle << LL_ENDL;
2768 2762
2769 // Session create succeeded, move forward. 2763 // Session create succeeded, move forward.
2770 mSessionStateEventHandle = sessionHandle; 2764 mSessionStateEventHandle = sessionHandle;
@@ -2777,23 +2771,23 @@ void LLVoiceClient::sessionStateChangeEvent(
2777 setState(stateSessionJoined); 2771 setState(stateSessionJoined);
2778 //RN: the uriString being returned by vivox here is actually your account uri, not the channel 2772 //RN: the uriString being returned by vivox here is actually your account uri, not the channel
2779 // you are attempting to join, so ignore it 2773 // you are attempting to join, so ignore it
2780 //llinfos << "received URI " << uriString << "(previously " << mSessionURI << ")" << llendl; 2774 //LL_DEBUGS("Voice") << "received URI " << uriString << "(previously " << mSessionURI << ")" << LL_ENDL;
2781 //mSessionURI = uriString; 2775 //mSessionURI = uriString;
2782 } 2776 }
2783 } 2777 }
2784 else if(sessionHandle == mNextSessionHandle) 2778 else if(sessionHandle == mNextSessionHandle)
2785 { 2779 {
2786// llinfos << "received URI " << uriString << ", name " << nameString << " for next session (handle " << mNextSessionHandle << ")" << llendl; 2780// LL_DEBUGS("Voice") << "received URI " << uriString << ", name " << nameString << " for next session (handle " << mNextSessionHandle << ")" << LL_ENDL;
2787 } 2781 }
2788 else 2782 else
2789 { 2783 {
2790 llwarns << "joining unknown session handle " << sessionHandle << ", URI " << uriString << ", name " << nameString << llendl; 2784 LL_WARNS("Voice") << "joining unknown session handle " << sessionHandle << ", URI " << uriString << ", name " << nameString << LL_ENDL;
2791 // MBW -- XXX -- Should we send a Session.Terminate here? 2785 // MBW -- XXX -- Should we send a Session.Terminate here?
2792 } 2786 }
2793 2787
2794 break; 2788 break;
2795 case 5: // I see this when leaving the session 2789 case 5: // I see this when leaving the session
2796 llinfos << "left session " << uriString << ", name " << nameString << " handle " << mNextSessionHandle << llendl; 2790 LL_INFOS("Voice") << "left session " << uriString << ", name " << nameString << " handle " << mNextSessionHandle << LL_ENDL;
2797 2791
2798 // Set the session handle to the empty string. If we get back to stateJoiningSession, we'll want to wait for the new session handle. 2792 // Set the session handle to the empty string. If we get back to stateJoiningSession, we'll want to wait for the new session handle.
2799 if(sessionHandle == mSessionHandle) 2793 if(sessionHandle == mSessionHandle)
@@ -2821,17 +2815,17 @@ void LLVoiceClient::sessionStateChangeEvent(
2821 case stateJoinSessionFailed: 2815 case stateJoinSessionFailed:
2822 case stateJoinSessionFailedWaiting: 2816 case stateJoinSessionFailedWaiting:
2823 // normal transition 2817 // normal transition
2824 llinfos << "left session " << sessionHandle << "in state " << state2string(getState()) << llendl; 2818 LL_INFOS("Voice") << "left session " << sessionHandle << "in state " << state2string(getState()) << LL_ENDL;
2825 setState(stateSessionTerminated); 2819 setState(stateSessionTerminated);
2826 break; 2820 break;
2827 2821
2828 case stateSessionTerminated: 2822 case stateSessionTerminated:
2829 // this will happen sometimes -- there are cases where we send the terminate and then go straight to this state. 2823 // this will happen sometimes -- there are cases where we send the terminate and then go straight to this state.
2830 llwarns << "left session " << sessionHandle << "in state " << state2string(getState()) << llendl; 2824 LL_WARNS("Voice") << "left session " << sessionHandle << "in state " << state2string(getState()) << LL_ENDL;
2831 break; 2825 break;
2832 2826
2833 default: 2827 default:
2834 llwarns << "unexpected SessionStateChangeEvent (left session) in state " << state2string(getState()) << llendl; 2828 LL_WARNS("Voice") << "unexpected SessionStateChangeEvent (left session) in state " << state2string(getState()) << LL_ENDL;
2835 setState(stateSessionTerminated); 2829 setState(stateSessionTerminated);
2836 break; 2830 break;
2837 } 2831 }
@@ -2842,14 +2836,14 @@ void LLVoiceClient::sessionStateChangeEvent(
2842 } 2836 }
2843 else 2837 else
2844 { 2838 {
2845 llinfos << "leaving unknown session handle " << sessionHandle << ", URI " << uriString << ", name " << nameString << llendl; 2839 LL_INFOS("Voice") << "leaving unknown session handle " << sessionHandle << ", URI " << uriString << ", name " << nameString << LL_ENDL;
2846 } 2840 }
2847 2841
2848 mSessionStateEventHandle.clear(); 2842 mSessionStateEventHandle.clear();
2849 mSessionStateEventURI.clear(); 2843 mSessionStateEventURI.clear();
2850 break; 2844 break;
2851 default: 2845 default:
2852 llwarns << "unknown state: " << state << llendl; 2846 LL_WARNS("Voice") << "unknown state: " << state << LL_ENDL;
2853 break; 2847 break;
2854 } 2848 }
2855} 2849}
@@ -2860,7 +2854,7 @@ void LLVoiceClient::loginStateChangeEvent(
2860 std::string &statusString, 2854 std::string &statusString,
2861 int state) 2855 int state)
2862{ 2856{
2863 llinfos << "state is " << state << llendl; 2857 LL_DEBUGS("Voice") << "state is " << state << LL_ENDL;
2864 /* 2858 /*
2865 According to Mike S., status codes for this event are: 2859 According to Mike S., status codes for this event are:
2866 login_state_logged_out=0, 2860 login_state_logged_out=0,
@@ -2881,7 +2875,8 @@ void LLVoiceClient::loginStateChangeEvent(
2881 break; 2875 break;
2882 2876
2883 default: 2877 default:
2884// llwarns << "unknown state: " << state << llendl; 2878 //Used to be a commented out warning
2879 LL_DEBUGS("Voice") << "unknown state: " << state << LL_ENDL;
2885 break; 2880 break;
2886 } 2881 }
2887} 2882}
@@ -2893,13 +2888,13 @@ void LLVoiceClient::sessionNewEvent(
2893 std::string &nameString, 2888 std::string &nameString,
2894 std::string &uriString) 2889 std::string &uriString)
2895{ 2890{
2896// llinfos << "state is " << state << llendl; 2891 LL_DEBUGS("Voice") << "state is " << state << LL_ENDL;
2897 2892
2898 switch(state) 2893 switch(state)
2899 { 2894 {
2900 case 0: 2895 case 0:
2901 { 2896 {
2902 llinfos << "session handle = " << eventSessionHandle << ", name = " << nameString << ", uri = " << uriString << llendl; 2897 LL_DEBUGS("Voice") << "session handle = " << eventSessionHandle << ", name = " << nameString << ", uri = " << uriString << LL_ENDL;
2903 2898
2904 LLUUID caller_id; 2899 LLUUID caller_id;
2905 if(IDFromName(nameString, caller_id)) 2900 if(IDFromName(nameString, caller_id))
@@ -2917,13 +2912,13 @@ void LLVoiceClient::sessionNewEvent(
2917 } 2912 }
2918 else 2913 else
2919 { 2914 {
2920 llwarns << "Could not generate caller id from uri " << uriString << llendl; 2915 LL_WARNS("Voice") << "Could not generate caller id from uri " << uriString << LL_ENDL;
2921 } 2916 }
2922 } 2917 }
2923 break; 2918 break;
2924 2919
2925 default: 2920 default:
2926 llwarns << "unknown state: " << state << llendl; 2921 LL_WARNS("Voice") << "unknown state: " << state << LL_ENDL;
2927 break; 2922 break;
2928 } 2923 }
2929} 2924}
@@ -2938,7 +2933,7 @@ void LLVoiceClient::participantStateChangeEvent(
2938 int participantType) 2933 int participantType)
2939{ 2934{
2940 participantState *participant = NULL; 2935 participantState *participant = NULL;
2941 llinfos << "state is " << state << llendl; 2936 LL_DEBUGS("Voice") << "state is " << state << LL_ENDL;
2942 2937
2943 switch(state) 2938 switch(state)
2944 { 2939 {
@@ -2947,8 +2942,8 @@ void LLVoiceClient::participantStateChangeEvent(
2947 if(participant) 2942 if(participant)
2948 { 2943 {
2949 participant->mName = nameString; 2944 participant->mName = nameString;
2950 llinfos << "added participant \"" << participant->mName 2945 LL_DEBUGS("Voice") << "added participant \"" << participant->mName
2951 << "\" (" << participant->mAvatarID << ")"<< llendl; 2946 << "\" (" << participant->mAvatarID << ")"<< LL_ENDL;
2952 } 2947 }
2953 break; 2948 break;
2954 case 9: // I see this when a participant leaves 2949 case 9: // I see this when a participant leaves
@@ -2959,7 +2954,7 @@ void LLVoiceClient::participantStateChangeEvent(
2959 } 2954 }
2960 break; 2955 break;
2961 default: 2956 default:
2962// llwarns << "unknown state: " << state << llendl; 2957 LL_DEBUGS("Voice") << "unknown state: " << state << LL_ENDL;
2963 break; 2958 break;
2964 } 2959 }
2965} 2960}
@@ -2989,13 +2984,13 @@ void LLVoiceClient::participantPropertiesEvent(
2989 } 2984 }
2990 else 2985 else
2991 { 2986 {
2992 llwarns << "unknown participant: " << uriString << llendl; 2987 LL_WARNS("Voice") << "unknown participant: " << uriString << LL_ENDL;
2993 } 2988 }
2994} 2989}
2995 2990
2996void LLVoiceClient::auxAudioPropertiesEvent(F32 energy) 2991void LLVoiceClient::auxAudioPropertiesEvent(F32 energy)
2997{ 2992{
2998// llinfos << "got energy " << energy << llendl; 2993 LL_DEBUGS("Voice") << "got energy " << energy << LL_ENDL;
2999 mTuningEnergy = energy; 2994 mTuningEnergy = energy;
3000} 2995}
3001 2996
@@ -3053,7 +3048,7 @@ LLVoiceClient::participantState *LLVoiceClient::addParticipant(const std::string
3053 } 3048 }
3054 } 3049 }
3055 3050
3056 llinfos << "participant \"" << result->mURI << "\" added." << llendl; 3051 LL_DEBUGS("Voice") << "participant \"" << result->mURI << "\" added." << LL_ENDL;
3057 } 3052 }
3058 3053
3059 return result; 3054 return result;
@@ -3079,7 +3074,7 @@ void LLVoiceClient::removeParticipant(LLVoiceClient::participantState *participa
3079 { 3074 {
3080 participantMap::iterator iter = mParticipantMap.find(participant->mURI); 3075 participantMap::iterator iter = mParticipantMap.find(participant->mURI);
3081 3076
3082 llinfos << "participant \"" << participant->mURI << "\" (" << participant->mAvatarID << ") removed." << llendl; 3077 LL_DEBUGS("Voice") << "participant \"" << participant->mURI << "\" (" << participant->mAvatarID << ") removed." << LL_ENDL;
3083 3078
3084 mParticipantMap.erase(iter); 3079 mParticipantMap.erase(iter);
3085 delete participant; 3080 delete participant;
@@ -3089,7 +3084,7 @@ void LLVoiceClient::removeParticipant(LLVoiceClient::participantState *participa
3089 3084
3090void LLVoiceClient::removeAllParticipants() 3085void LLVoiceClient::removeAllParticipants()
3091{ 3086{
3092 llinfos << "called" << llendl; 3087 LL_DEBUGS("Voice") << "called" << LL_ENDL;
3093 3088
3094 while(!mParticipantMap.empty()) 3089 while(!mParticipantMap.empty())
3095 { 3090 {
@@ -3172,7 +3167,7 @@ void LLVoiceClient::clearChannelMap(void)
3172 3167
3173void LLVoiceClient::addChannelMapEntry(std::string &name, std::string &uri) 3168void LLVoiceClient::addChannelMapEntry(std::string &name, std::string &uri)
3174{ 3169{
3175// llinfos << "Adding channel name mapping: " << name << " -> " << uri << llendl; 3170 LL_DEBUGS("Voice") << "Adding channel name mapping: " << name << " -> " << uri << LL_ENDL;
3176 mChannelMap.insert(channelMap::value_type(name, uri)); 3171 mChannelMap.insert(channelMap::value_type(name, uri));
3177} 3172}
3178 3173
@@ -3195,7 +3190,7 @@ void LLVoiceClient::parcelChanged()
3195 if(getState() >= stateLoggedIn) 3190 if(getState() >= stateLoggedIn)
3196 { 3191 {
3197 // If the user is logged in, start a channel lookup. 3192 // If the user is logged in, start a channel lookup.
3198 llinfos << "sending ParcelVoiceInfoRequest (" << mCurrentRegionName << ", " << mCurrentParcelLocalID << ")" << llendl; 3193 LL_DEBUGS("Voice") << "sending ParcelVoiceInfoRequest (" << mCurrentRegionName << ", " << mCurrentParcelLocalID << ")" << LL_ENDL;
3199 3194
3200 std::string url = gAgent.getRegion()->getCapability("ParcelVoiceInfoRequest"); 3195 std::string url = gAgent.getRegion()->getCapability("ParcelVoiceInfoRequest");
3201 LLSD data; 3196 LLSD data;
@@ -3207,7 +3202,7 @@ void LLVoiceClient::parcelChanged()
3207 else 3202 else
3208 { 3203 {
3209 // The transition to stateLoggedIn needs to kick this off again. 3204 // The transition to stateLoggedIn needs to kick this off again.
3210 llinfos << "not logged in yet, deferring" << llendl; 3205 LL_INFOS("Voice") << "not logged in yet, deferring" << LL_ENDL;
3211 } 3206 }
3212} 3207}
3213 3208
@@ -3219,7 +3214,7 @@ void LLVoiceClient::switchChannel(
3219{ 3214{
3220 bool needsSwitch = false; 3215 bool needsSwitch = false;
3221 3216
3222 llinfos << "called in state " << state2string(getState()) << " with uri \"" << uri << "\"" << llendl; 3217 LL_DEBUGS("Voice") << "called in state " << state2string(getState()) << " with uri \"" << uri << "\"" << LL_ENDL;
3223 3218
3224 switch(getState()) 3219 switch(getState())
3225 { 3220 {
@@ -3258,12 +3253,12 @@ void LLVoiceClient::switchChannel(
3258 if(uri.empty()) 3253 if(uri.empty())
3259 { 3254 {
3260 // Leave any channel we may be in 3255 // Leave any channel we may be in
3261 llinfos << "leaving channel" << llendl; 3256 LL_DEBUGS("Voice") << "leaving channel" << LL_ENDL;
3262 notifyStatusObservers(LLVoiceClientStatusObserver::STATUS_VOICE_DISABLED); 3257 notifyStatusObservers(LLVoiceClientStatusObserver::STATUS_VOICE_DISABLED);
3263 } 3258 }
3264 else 3259 else
3265 { 3260 {
3266 llinfos << "switching to channel " << uri << llendl; 3261 LL_DEBUGS("Voice") << "switching to channel " << uri << LL_ENDL;
3267 } 3262 }
3268 3263
3269 if(getState() <= stateNoChannel) 3264 if(getState() <= stateNoChannel)
@@ -3312,12 +3307,12 @@ void LLVoiceClient::setSpatialChannel(
3312 mSpatialSessionURI = uri; 3307 mSpatialSessionURI = uri;
3313 mAreaVoiceDisabled = mSpatialSessionURI.empty(); 3308 mAreaVoiceDisabled = mSpatialSessionURI.empty();
3314 3309
3315 llinfos << "got spatial channel uri: \"" << uri << "\"" << llendl; 3310 LL_DEBUGS("Voice") << "got spatial channel uri: \"" << uri << "\"" << LL_ENDL;
3316 3311
3317 if(mNonSpatialChannel || !mNextSessionSpatial) 3312 if(mNonSpatialChannel || !mNextSessionSpatial)
3318 { 3313 {
3319 // User is in a non-spatial chat or joining a non-spatial chat. Don't switch channels. 3314 // User is in a non-spatial chat or joining a non-spatial chat. Don't switch channels.
3320 llinfos << "in non-spatial chat, not switching channels" << llendl; 3315 LL_INFOS("Voice") << "in non-spatial chat, not switching channels" << LL_ENDL;
3321 } 3316 }
3322 else 3317 else
3323 { 3318 {
@@ -3559,7 +3554,7 @@ void LLVoiceClient::leaveChannel(void)
3559{ 3554{
3560 if(getState() == stateRunning) 3555 if(getState() == stateRunning)
3561 { 3556 {
3562// llinfos << "leaving channel for teleport/logout" << llendl; 3557 LL_DEBUGS("Voice") << "leaving channel for teleport/logout" << LL_ENDL;
3563 mChannelName.clear(); 3558 mChannelName.clear();
3564 sessionTerminate(); 3559 sessionTerminate();
3565 } 3560 }
@@ -3607,6 +3602,24 @@ bool LLVoiceClient::voiceEnabled()
3607 return gSavedSettings.getBOOL("EnableVoiceChat") && !gSavedSettings.getBOOL("CmdLineDisableVoice"); 3602 return gSavedSettings.getBOOL("EnableVoiceChat") && !gSavedSettings.getBOOL("CmdLineDisableVoice");
3608} 3603}
3609 3604
3605void LLVoiceClient::setLipSyncEnabled(BOOL enabled)
3606{
3607 mLipSyncEnabled = enabled;
3608}
3609
3610BOOL LLVoiceClient::lipSyncEnabled()
3611{
3612
3613 if ( mVoiceEnabled && stateDisabled != getState() )
3614 {
3615 return mLipSyncEnabled;
3616 }
3617 else
3618 {
3619 return FALSE;
3620 }
3621}
3622
3610void LLVoiceClient::setUsePTT(bool usePTT) 3623void LLVoiceClient::setUsePTT(bool usePTT)
3611{ 3624{
3612 if(usePTT && !mUsePTT) 3625 if(usePTT && !mUsePTT)
@@ -3650,7 +3663,7 @@ void LLVoiceClient::setEarLocation(S32 loc)
3650{ 3663{
3651 if(mEarLocation != loc) 3664 if(mEarLocation != loc)
3652 { 3665 {
3653 llinfos << "Setting mEarLocation to " << loc << llendl; 3666 LL_DEBUGS("Voice") << "Setting mEarLocation to " << loc << LL_ENDL;
3654 3667
3655 mEarLocation = loc; 3668 mEarLocation = loc;
3656 mSpatialCoordsDirty = true; 3669 mSpatialCoordsDirty = true;
@@ -3659,7 +3672,7 @@ void LLVoiceClient::setEarLocation(S32 loc)
3659 3672
3660void LLVoiceClient::setVoiceVolume(F32 volume) 3673void LLVoiceClient::setVoiceVolume(F32 volume)
3661{ 3674{
3662// llinfos << "volume is " << volume << llendl; 3675 LL_DEBUGS("Voice") << "volume is " << volume << LL_ENDL;
3663 3676
3664 // incoming volume has the range [0.0 ... 1.0], with 0.5 as the default. 3677 // incoming volume has the range [0.0 ... 1.0], with 0.5 as the default.
3665 // Map it as follows: 0.0 -> -100, 0.5 -> 24, 1.0 -> 50 3678 // Map it as follows: 0.0 -> -100, 0.5 -> 24, 1.0 -> 50
@@ -3708,7 +3721,7 @@ void LLVoiceClient::setVivoxDebugServerName(std::string &serverName)
3708 3721
3709void LLVoiceClient::keyDown(KEY key, MASK mask) 3722void LLVoiceClient::keyDown(KEY key, MASK mask)
3710{ 3723{
3711// llinfos << "key is " << LLKeyboard::stringFromKey(key) << llendl; 3724 LL_DEBUGS("Voice") << "key is " << LLKeyboard::stringFromKey(key) << LL_ENDL;
3712 3725
3713 if (gKeyboard->getKeyRepeated(key)) 3726 if (gKeyboard->getKeyRepeated(key))
3714 { 3727 {
@@ -4002,7 +4015,7 @@ void LLVoiceClient::notifyStatusObservers(LLVoiceClientStatusObserver::EStatusTy
4002 mVivoxErrorStatusCode = 0; 4015 mVivoxErrorStatusCode = 0;
4003 } 4016 }
4004 4017
4005 llinfos << " " << LLVoiceClientStatusObserver::status2string(status) << ", session URI " << mSessionURI << llendl; 4018 LL_DEBUGS("Voice") << " " << LLVoiceClientStatusObserver::status2string(status) << ", session URI " << mSessionURI << LL_ENDL;
4006 4019
4007 for (status_observer_set_t::iterator it = mStatusObservers.begin(); 4020 for (status_observer_set_t::iterator it = mStatusObservers.begin();
4008 it != mStatusObservers.end(); 4021 it != mStatusObservers.end();
diff --git a/linden/indra/newview/llvoiceclient.h b/linden/indra/newview/llvoiceclient.h
index d12bfa8..d1609a8 100644
--- a/linden/indra/newview/llvoiceclient.h
+++ b/linden/indra/newview/llvoiceclient.h
@@ -210,6 +210,8 @@ class LLVoiceClient: public LLSingleton<LLVoiceClient>
210 void setMicGain(F32 volume); 210 void setMicGain(F32 volume);
211 void setUserVolume(const LLUUID& id, F32 volume); // set's volume for specified agent, from 0-1 (where .5 is nominal) 211 void setUserVolume(const LLUUID& id, F32 volume); // set's volume for specified agent, from 0-1 (where .5 is nominal)
212 void setVivoxDebugServerName(std::string &serverName); 212 void setVivoxDebugServerName(std::string &serverName);
213 void setLipSyncEnabled(BOOL enabled);
214 BOOL lipSyncEnabled();
213 215
214 // PTT key triggering 216 // PTT key triggering
215 void keyDown(KEY key, MASK mask); 217 void keyDown(KEY key, MASK mask);
@@ -516,6 +518,8 @@ class LLVoiceClient: public LLSingleton<LLVoiceClient>
516 518
517 LLTimer mUpdateTimer; 519 LLTimer mUpdateTimer;
518 520
521 BOOL mLipSyncEnabled;
522
519 typedef std::set<LLVoiceClientParticipantObserver*> observer_set_t; 523 typedef std::set<LLVoiceClientParticipantObserver*> observer_set_t;
520 observer_set_t mObservers; 524 observer_set_t mObservers;
521 525
diff --git a/linden/indra/newview/llvoicevisualizer.cpp b/linden/indra/newview/llvoicevisualizer.cpp
index 6b2a3e6..ba16feb 100644
--- a/linden/indra/newview/llvoicevisualizer.cpp
+++ b/linden/indra/newview/llvoicevisualizer.cpp
@@ -45,7 +45,7 @@
45#include "llviewerimage.h" 45#include "llviewerimage.h"
46#include "llviewerimagelist.h" 46#include "llviewerimagelist.h"
47#include "llvoiceclient.h" 47#include "llvoiceclient.h"
48#include "llglimmediate.h" 48#include "llrender.h"
49 49
50//brent's wave image 50//brent's wave image
51//29de489d-0491-fb00-7dab-f9e686d31e83 51//29de489d-0491-fb00-7dab-f9e686d31e83
@@ -79,6 +79,35 @@ const F32 DEFAULT_MAXIMUM_GESTICULATION_AMPLITUDE = 1.0f;
79const F32 ONE_HALF = 1.0f; // to clarify intent and reduce magic numbers in the code. 79const F32 ONE_HALF = 1.0f; // to clarify intent and reduce magic numbers in the code.
80const LLVector3 WORLD_UPWARD_DIRECTION = LLVector3( 0.0f, 0.0f, 1.0f ); // Z is up in SL 80const LLVector3 WORLD_UPWARD_DIRECTION = LLVector3( 0.0f, 0.0f, 1.0f ); // Z is up in SL
81 81
82
83//------------------------------------------------------------------
84// handles parameter updates
85//------------------------------------------------------------------
86static bool handleVoiceVisualizerPrefsChanged(const LLSD& newvalue)
87{
88 // Note: Ignore the specific event value, we look up the ones we want
89 LLVoiceVisualizer::setPreferences();
90 return true;
91}
92
93//------------------------------------------------------------------
94// Initialize the statics
95//------------------------------------------------------------------
96bool LLVoiceVisualizer::sPrefsInitialized = false;
97BOOL LLVoiceVisualizer::sLipSyncEnabled = FALSE;
98F32* LLVoiceVisualizer::sOoh = NULL;
99F32* LLVoiceVisualizer::sAah = NULL;
100U32 LLVoiceVisualizer::sOohs = 0;
101U32 LLVoiceVisualizer::sAahs = 0;
102F32 LLVoiceVisualizer::sOohAahRate = 0.0f;
103F32* LLVoiceVisualizer::sOohPowerTransfer = NULL;
104U32 LLVoiceVisualizer::sOohPowerTransfers = 0;
105F32 LLVoiceVisualizer::sOohPowerTransfersf = 0.0f;
106F32* LLVoiceVisualizer::sAahPowerTransfer = NULL;
107U32 LLVoiceVisualizer::sAahPowerTransfers = 0;
108F32 LLVoiceVisualizer::sAahPowerTransfersf = 0.0f;
109
110
82//----------------------------------------------- 111//-----------------------------------------------
83// constructor 112// constructor
84//----------------------------------------------- 113//-----------------------------------------------
@@ -87,6 +116,7 @@ LLVoiceVisualizer::LLVoiceVisualizer( const U8 type )
87{ 116{
88 mCurrentTime = mTimer.getTotalSeconds(); 117 mCurrentTime = mTimer.getTotalSeconds();
89 mPreviousTime = mCurrentTime; 118 mPreviousTime = mCurrentTime;
119 mStartTime = mCurrentTime;
90 mVoiceSourceWorldPosition = LLVector3( 0.0f, 0.0f, 0.0f ); 120 mVoiceSourceWorldPosition = LLVector3( 0.0f, 0.0f, 0.0f );
91 mSpeakingAmplitude = 0.0f; 121 mSpeakingAmplitude = 0.0f;
92 mCurrentlySpeaking = false; 122 mCurrentlySpeaking = false;
@@ -105,7 +135,7 @@ LLVoiceVisualizer::LLVoiceVisualizer( const U8 type )
105 "29de489d-0491-fb00-7dab-f9e686d31e83.j2c", 135 "29de489d-0491-fb00-7dab-f9e686d31e83.j2c",
106 "29de489d-0491-fb00-7dab-f9e686d31e83.j2c", 136 "29de489d-0491-fb00-7dab-f9e686d31e83.j2c",
107 "29de489d-0491-fb00-7dab-f9e686d31e83.j2c", 137 "29de489d-0491-fb00-7dab-f9e686d31e83.j2c",
108 "29de489d-0491-fb00-7dab-f9e686d31e83.j2c", 138 "29de489d-0491-fb00-7dab-f9e686d31e83.j2c",
109 "29de489d-0491-fb00-7dab-f9e686d31e83.j2c" 139 "29de489d-0491-fb00-7dab-f9e686d31e83.j2c"
110 }; 140 };
111 141
@@ -117,7 +147,23 @@ LLVoiceVisualizer::LLVoiceVisualizer( const U8 type )
117 mSoundSymbol.mWaveOpacity [i] = 1.0f; 147 mSoundSymbol.mWaveOpacity [i] = 1.0f;
118 mSoundSymbol.mWaveExpansion [i] = 1.0f; 148 mSoundSymbol.mWaveExpansion [i] = 1.0f;
119 } 149 }
120 150
151 // The first instance loads the initial state from prefs.
152 if (!sPrefsInitialized)
153 {
154 setPreferences();
155
156 // Set up our listener to get updates on all prefs values we care about.
157 gSavedSettings.getControl("LipSyncEnabled")->getSignal()->connect(boost::bind(&handleVoiceVisualizerPrefsChanged, _1));
158 gSavedSettings.getControl("LipSyncOohAahRate")->getSignal()->connect(boost::bind(&handleVoiceVisualizerPrefsChanged, _1));
159 gSavedSettings.getControl("LipSyncOoh")->getSignal()->connect(boost::bind(&handleVoiceVisualizerPrefsChanged, _1));
160 gSavedSettings.getControl("LipSyncAah")->getSignal()->connect(boost::bind(&handleVoiceVisualizerPrefsChanged, _1));
161 gSavedSettings.getControl("LipSyncOohPowerTransfer")->getSignal()->connect(boost::bind(&handleVoiceVisualizerPrefsChanged, _1));
162 gSavedSettings.getControl("LipSyncAahPowerTransfer")->getSignal()->connect(boost::bind(&handleVoiceVisualizerPrefsChanged, _1));
163
164 sPrefsInitialized = true;
165 }
166
121}//--------------------------------------------------- 167}//---------------------------------------------------
122 168
123//--------------------------------------------------- 169//---------------------------------------------------
@@ -144,6 +190,7 @@ void LLVoiceVisualizer::setVoiceEnabled( bool v )
144//--------------------------------------------------- 190//---------------------------------------------------
145void LLVoiceVisualizer::setStartSpeaking() 191void LLVoiceVisualizer::setStartSpeaking()
146{ 192{
193 mStartTime = mTimer.getTotalSeconds();
147 mCurrentlySpeaking = true; 194 mCurrentlySpeaking = true;
148 mSoundSymbol.mActive = true; 195 mSoundSymbol.mActive = true;
149 196
@@ -176,6 +223,130 @@ void LLVoiceVisualizer::setSpeakingAmplitude( F32 a )
176 223
177 224
178//--------------------------------------------------- 225//---------------------------------------------------
226void LLVoiceVisualizer::setPreferences( )
227{
228 sLipSyncEnabled = gSavedSettings.getBOOL("LipSyncEnabled");
229 sOohAahRate = gSavedSettings.getF32("LipSyncOohAahRate");
230
231 std::string oohString = gSavedSettings.getString("LipSyncOoh");
232 lipStringToF32s (oohString, sOoh, sOohs);
233
234 std::string aahString = gSavedSettings.getString("LipSyncAah");
235 lipStringToF32s (aahString, sAah, sAahs);
236
237 std::string oohPowerString = gSavedSettings.getString("LipSyncOohPowerTransfer");
238 lipStringToF32s (oohPowerString, sOohPowerTransfer, sOohPowerTransfers);
239 sOohPowerTransfersf = (F32) sOohPowerTransfers;
240
241 std::string aahPowerString = gSavedSettings.getString("LipSyncAahPowerTransfer");
242 lipStringToF32s (aahPowerString, sAahPowerTransfer, sAahPowerTransfers);
243 sAahPowerTransfersf = (F32) sAahPowerTransfers;
244
245}//---------------------------------------------------
246
247
248//---------------------------------------------------
249// convert a string of digits to an array of floats.
250// the result for each digit is the value of the
251// digit multiplied by 0.11
252//---------------------------------------------------
253void LLVoiceVisualizer::lipStringToF32s ( std::string& in_string, F32*& out_F32s, U32& count_F32s )
254{
255 delete[] out_F32s; // get rid of the current array
256
257 count_F32s = in_string.length();
258 if (count_F32s == 0)
259 {
260 // we don't like zero length arrays
261
262 count_F32s = 1;
263 out_F32s = new F32[1];
264 out_F32s[0] = 0.0f;
265 }
266 else
267 {
268 out_F32s = new F32[count_F32s];
269
270 for (U32 i=0; i<count_F32s; i++)
271 {
272 // we convert the characters 0 to 9 to their numeric value
273 // anything else we take the low order four bits with a ceiling of 9
274
275 U8 digit = in_string[i];
276 U8 four_bits = digit % 16;
277 if (four_bits > 9)
278 {
279 four_bits = 9;
280 }
281 out_F32s[i] = 0.11f * (F32) four_bits;
282 }
283 }
284
285}//---------------------------------------------------
286
287
288//--------------------------------------------------------------------------
289// find the amount to blend the ooh and aah mouth morphs
290//--------------------------------------------------------------------------
291void LLVoiceVisualizer::lipSyncOohAah( F32& ooh, F32& aah )
292{
293 if( ( sLipSyncEnabled == TRUE ) && mCurrentlySpeaking )
294 {
295 U32 transfer_index = (U32) (sOohPowerTransfersf * mSpeakingAmplitude);
296 if (transfer_index < 0)
297 {
298 transfer_index = 0;
299 }
300 if (transfer_index >= sOohPowerTransfers)
301 {
302 transfer_index = sOohPowerTransfers - 1;
303 }
304 F32 transfer_ooh = sOohPowerTransfer[transfer_index];
305
306 transfer_index = (U32) (sAahPowerTransfersf * mSpeakingAmplitude);
307 if (transfer_index < 0)
308 {
309 transfer_index = 0;
310 }
311 if (transfer_index >= sAahPowerTransfers)
312 {
313 transfer_index = sAahPowerTransfers - 1;
314 }
315 F32 transfer_aah = sAahPowerTransfer[transfer_index];
316
317 F64 current_time = mTimer.getTotalSeconds();
318 F64 elapsed_time = current_time - mStartTime;
319 U32 elapsed_frames = (U32) (elapsed_time * sOohAahRate);
320 U32 elapsed_oohs = elapsed_frames % sOohs;
321 U32 elapsed_aahs = elapsed_frames % sAahs;
322
323 ooh = transfer_ooh * sOoh[elapsed_oohs];
324 aah = transfer_aah * sAah[elapsed_aahs];
325
326 /*
327 llinfos << " elapsed frames " << elapsed_frames
328 << " ooh " << ooh
329 << " aah " << aah
330 << " transfer ooh" << transfer_ooh
331 << " transfer aah" << transfer_aah
332 << " start time " << mStartTime
333 << " current time " << current_time
334 << " elapsed time " << elapsed_time
335 << " elapsed oohs " << elapsed_oohs
336 << " elapsed aahs " << elapsed_aahs
337 << llendl;
338 */
339 }
340 else
341 {
342 ooh = 0.0f;
343 aah = 0.0f;
344 }
345
346}//---------------------------------------------------
347
348
349//---------------------------------------------------
179// this method is inherited from HUD Effect 350// this method is inherited from HUD Effect
180//--------------------------------------------------- 351//---------------------------------------------------
181void LLVoiceVisualizer::render() 352void LLVoiceVisualizer::render()
diff --git a/linden/indra/newview/llvoicevisualizer.h b/linden/indra/newview/llvoicevisualizer.h
index 8b1636f..76eb282 100644
--- a/linden/indra/newview/llvoicevisualizer.h
+++ b/linden/indra/newview/llvoicevisualizer.h
@@ -90,7 +90,9 @@ class LLVoiceVisualizer : public LLHUDEffect
90 void setStopSpeaking(); // tell me when the av stops speaking 90 void setStopSpeaking(); // tell me when the av stops speaking
91 bool getCurrentlySpeaking(); // the get for the above set 91 bool getCurrentlySpeaking(); // the get for the above set
92 VoiceGesticulationLevel getCurrentGesticulationLevel(); // based on voice amplitude, I'll give you the current "energy level" of avatar speech 92 VoiceGesticulationLevel getCurrentGesticulationLevel(); // based on voice amplitude, I'll give you the current "energy level" of avatar speech
93 93 static void setPreferences( );
94 static void lipStringToF32s ( std::string& in_string, F32*& out_F32s, U32& count_F32s ); // convert a string of digits to an array of floats
95 void lipSyncOohAah( F32& ooh, F32& aah );
94 void render(); // inherited from HUD Effect 96 void render(); // inherited from HUD Effect
95 void packData(LLMessageSystem *mesgsys); // inherited from HUD Effect 97 void packData(LLMessageSystem *mesgsys); // inherited from HUD Effect
96 void unpackData(LLMessageSystem *mesgsys, S32 blocknum); // inherited from HUD Effect 98 void unpackData(LLMessageSystem *mesgsys, S32 blocknum); // inherited from HUD Effect
@@ -124,6 +126,7 @@ class LLVoiceVisualizer : public LLHUDEffect
124 }; 126 };
125 127
126 LLFrameTimer mTimer; // so I can ask the current time in seconds 128 LLFrameTimer mTimer; // so I can ask the current time in seconds
129 F64 mStartTime; // time in seconds when speaking started
127 F64 mCurrentTime; // current time in seconds, captured every step 130 F64 mCurrentTime; // current time in seconds, captured every step
128 F64 mPreviousTime; // copy of "current time" from last frame 131 F64 mPreviousTime; // copy of "current time" from last frame
129 SoundSymbol mSoundSymbol; // the sound symbol that appears over the avatar's head 132 SoundSymbol mSoundSymbol; // the sound symbol that appears over the avatar's head
@@ -134,6 +137,24 @@ class LLVoiceVisualizer : public LLHUDEffect
134 F32 mMaxGesticulationAmplitude; // this is the upper-limit of the envelope of detectable gesticulation leves 137 F32 mMaxGesticulationAmplitude; // this is the upper-limit of the envelope of detectable gesticulation leves
135 F32 mMinGesticulationAmplitude; // this is the lower-limit of the envelope of detectable gesticulation leves 138 F32 mMinGesticulationAmplitude; // this is the lower-limit of the envelope of detectable gesticulation leves
136 139
140 //---------------------------------------------------
141 // private static members
142 //---------------------------------------------------
143
144 static BOOL sLipSyncEnabled; // 0 disabled, 1 babble loop
145 static bool sPrefsInitialized; // the first instance will initialize the static members
146 static F32* sOoh; // the babble loop of amplitudes for the ooh morph
147 static F32* sAah; // the babble loop of amplitudes for the ooh morph
148 static U32 sOohs; // the number of entries in the ooh loop
149 static U32 sAahs; // the number of entries in the aah loop
150 static F32 sOohAahRate; // frames per second for the babble loop
151 static F32* sOohPowerTransfer; // the power transfer characteristics for the ooh amplitude
152 static U32 sOohPowerTransfers; // the number of entries in the ooh transfer characteristics
153 static F32 sOohPowerTransfersf; // the number of entries in the ooh transfer characteristics as a float
154 static F32* sAahPowerTransfer; // the power transfer characteristics for the aah amplitude
155 static U32 sAahPowerTransfers; // the number of entries in the aah transfer characteristics
156 static F32 sAahPowerTransfersf; // the number of entries in the aah transfer characteristics as a float
157
137};//----------------------------------------------------------------- 158};//-----------------------------------------------------------------
138 // end of LLVoiceVisualizer class 159 // end of LLVoiceVisualizer class
139//------------------------------------------------------------------ 160//------------------------------------------------------------------
diff --git a/linden/indra/newview/llvosky.cpp b/linden/indra/newview/llvosky.cpp
index 8e60010..eae322e 100644
--- a/linden/indra/newview/llvosky.cpp
+++ b/linden/indra/newview/llvosky.cpp
@@ -194,11 +194,13 @@ inline void color_gamma_correct(LLColor3 &col)
194 194
195S32 LLSkyTex::sComponents = 4; 195S32 LLSkyTex::sComponents = 4;
196S32 LLSkyTex::sResolution = 64; 196S32 LLSkyTex::sResolution = 64;
197F32 LLSkyTex::sInterpVal = 0.f; 197F32 LLSkyTex::sInterpVal = 0.f;
198S32 LLSkyTex::sCurrent = 0; 198S32 LLSkyTex::sCurrent = 0;
199 199
200 200
201LLSkyTex::LLSkyTex() 201LLSkyTex::LLSkyTex() :
202 mSkyData(NULL),
203 mSkyDirs(NULL)
202{ 204{
203} 205}
204 206
diff --git a/linden/indra/newview/llvosky.h b/linden/indra/newview/llvosky.h
index 70aa3af..124b690 100644
--- a/linden/indra/newview/llvosky.h
+++ b/linden/indra/newview/llvosky.h
@@ -207,7 +207,7 @@ protected:
207 F32 mDiskRadius; 207 F32 mDiskRadius;
208 BOOL mDraw; // FALSE - do not draw. 208 BOOL mDraw; // FALSE - do not draw.
209 F32 mHorizonVisibility; // number [0, 1] due to how horizon 209 F32 mHorizonVisibility; // number [0, 1] due to how horizon
210 F32 mVisibility; // same but due to other objects being in frong. 210 F32 mVisibility; // same but due to other objects being in throng.
211 BOOL mVisible; 211 BOOL mVisible;
212 static F32 sInterpVal; 212 static F32 sInterpVal;
213 LLVector3 mQuadCorner[4]; 213 LLVector3 mQuadCorner[4];
@@ -217,10 +217,12 @@ protected:
217 217
218public: 218public:
219 LLHeavenBody(const F32 rad) : 219 LLHeavenBody(const F32 rad) :
220 mDirectionCached(LLVector3(0,0,0)), mDirection(LLVector3(0,0,0)), 220 mDirectionCached(LLVector3(0,0,0)),
221 mDiskRadius(rad), mDraw(FALSE), 221 mDirection(LLVector3(0,0,0)),
222 mHorizonVisibility(1), mVisibility(1) 222 mIntensity(0.f),
223 223 mDiskRadius(rad), mDraw(FALSE),
224 mHorizonVisibility(1.f), mVisibility(1.f),
225 mVisible(FALSE)
224 { 226 {
225 mColor.setToBlack(); 227 mColor.setToBlack();
226 mColorCached.setToBlack(); 228 mColorCached.setToBlack();
@@ -261,7 +263,6 @@ public:
261 BOOL isVisible() const { return mVisible; } 263 BOOL isVisible() const { return mVisible; }
262 void setVisible(const BOOL v) { mVisible = v; } 264 void setVisible(const BOOL v) { mVisible = v; }
263 265
264
265 const F32& getIntensity() const { return mIntensity; } 266 const F32& getIntensity() const { return mIntensity; }
266 void setIntensity(const F32 c) { mIntensity = c; } 267 void setIntensity(const F32 c) { mIntensity = c; }
267 268
@@ -311,19 +312,19 @@ LL_FORCE_INLINE LLColor3 calc_air_sca_sea_level()
311 312
312const LLColor3 gAirScaSeaLevel = calc_air_sca_sea_level(); 313const LLColor3 gAirScaSeaLevel = calc_air_sca_sea_level();
313const F32 AIR_SCA_INTENS = color_intens(gAirScaSeaLevel); 314const F32 AIR_SCA_INTENS = color_intens(gAirScaSeaLevel);
314const F32 AIR_SCA_AVG = AIR_SCA_INTENS / 3; 315const F32 AIR_SCA_AVG = AIR_SCA_INTENS / 3.f;
315 316
316class LLHaze 317class LLHaze
317{ 318{
318public: 319public:
319 LLHaze() : mG(0), mFalloff(1) {mSigSca.setToBlack();} 320 LLHaze() : mG(0), mFalloff(1), mAbsCoef(0.f) {mSigSca.setToBlack();}
320 LLHaze(const F32 g, const LLColor3& sca, const F32 fo = 2) : 321 LLHaze(const F32 g, const LLColor3& sca, const F32 fo = 2.f) :
321 mG(g), mSigSca(0.25f/F_PI * sca), mFalloff(fo), mAbsCoef(0) 322 mG(g), mSigSca(0.25f/F_PI * sca), mFalloff(fo), mAbsCoef(0.f)
322 { 323 {
323 mAbsCoef = color_intens(mSigSca) / AIR_SCA_INTENS; 324 mAbsCoef = color_intens(mSigSca) / AIR_SCA_INTENS;
324 } 325 }
325 326
326 LLHaze(const F32 g, const F32 sca, const F32 fo = 2) : mG(g), 327 LLHaze(const F32 g, const F32 sca, const F32 fo = 2.f) : mG(g),
327 mSigSca(0.25f/F_PI * LLColor3(sca, sca, sca)), mFalloff(fo) 328 mSigSca(0.25f/F_PI * LLColor3(sca, sca, sca)), mFalloff(fo)
328 { 329 {
329 mAbsCoef = 0.01f * sca / AIR_SCA_AVG; 330 mAbsCoef = 0.01f * sca / AIR_SCA_AVG;
diff --git a/linden/indra/newview/llvosurfacepatch.cpp b/linden/indra/newview/llvosurfacepatch.cpp
index c0474f2..310a745 100644
--- a/linden/indra/newview/llvosurfacepatch.cpp
+++ b/linden/indra/newview/llvosurfacepatch.cpp
@@ -960,12 +960,12 @@ void LLTerrainPartition::getGeometry(LLSpatialGroup* group)
960 LLStrider<LLColor4U> colors; 960 LLStrider<LLColor4U> colors;
961 LLStrider<U16> indices; 961 LLStrider<U16> indices;
962 962
963 buffer->getVertexStrider(vertices); 963 llassert_always(buffer->getVertexStrider(vertices));
964 buffer->getNormalStrider(normals); 964 llassert_always(buffer->getNormalStrider(normals));
965 buffer->getTexCoordStrider(texcoords); 965 llassert_always(buffer->getTexCoordStrider(texcoords));
966 buffer->getTexCoord2Strider(texcoords2); 966 llassert_always(buffer->getTexCoord2Strider(texcoords2));
967 buffer->getColorStrider(colors); 967 llassert_always(buffer->getColorStrider(colors));
968 buffer->getIndexStrider(indices); 968 llassert_always(buffer->getIndexStrider(indices));
969 969
970 U32 indices_index = 0; 970 U32 indices_index = 0;
971 U32 index_offset = 0; 971 U32 index_offset = 0;
diff --git a/linden/indra/newview/llwatchdog.cpp b/linden/indra/newview/llwatchdog.cpp
new file mode 100644
index 0000000..1dd984e
--- /dev/null
+++ b/linden/indra/newview/llwatchdog.cpp
@@ -0,0 +1,222 @@
1/**
2 * @file llthreadwatchdog.cpp
3 * @brief The LLThreadWatchdog class definitions
4 *
5 * $LicenseInfo:firstyear=2007&license=viewergpl$
6 *
7 * Copyright (c) 2007-2008, Linden Research, Inc.
8 *
9 * Second Life Viewer Source Code
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
12 * ("GPL"), unless you have obtained a separate licensing agreement
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
15 * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
16 *
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
19 * in the file doc/FLOSS-exception.txt in this software distribution, or
20 * online at http://secondlifegrid.net/programs/open_source/licensing/flossexception
21 *
22 * By copying, modifying or distributing this software, you acknowledge
23 * that you have read and understood your obligations described above,
24 * and agree to abide by those obligations.
25 *
26 * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
27 * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
28 * COMPLETENESS OR PERFORMANCE.
29 * $/LicenseInfo$
30 */
31
32
33#include "llviewerprecompiledheaders.h"
34#include "llwatchdog.h"
35
36// This class runs the watchdog timing thread.
37class LLWatchdogTimerThread : public LLThread
38{
39public:
40 LLWatchdogTimerThread() :
41 LLThread("Watchdog"),
42 mSleepMsecs(0),
43 mStopping(false)
44 {
45 }
46
47 ~LLWatchdogTimerThread() {}
48
49 void setSleepTime(long ms) { mSleepMsecs = ms; }
50 void stop()
51 {
52 mStopping = true;
53 ms_sleep(1);
54 }
55
56 /* virtual */ void run()
57 {
58 while(!mStopping)
59 {
60 LLWatchdog::getInstance()->run();
61 ms_sleep(mSleepMsecs);
62 }
63 }
64
65private:
66 long mSleepMsecs;
67 bool mStopping;
68};
69
70// LLWatchdogEntry
71LLWatchdogEntry::LLWatchdogEntry()
72{
73}
74
75LLWatchdogEntry::~LLWatchdogEntry()
76{
77}
78
79void LLWatchdogEntry::start()
80{
81 LLWatchdog::getInstance()->add(this);
82}
83
84void LLWatchdogEntry::stop()
85{
86 LLWatchdog::getInstance()->remove(this);
87}
88
89// LLWatchdogTimeout
90LLWatchdogTimeout::LLWatchdogTimeout() :
91 mTimeout(0.0f)
92{
93}
94
95LLWatchdogTimeout::~LLWatchdogTimeout()
96{
97}
98
99bool LLWatchdogTimeout::isAlive() const
100{
101 return (mTimer.getStarted() && !mTimer.hasExpired());
102}
103
104void LLWatchdogTimeout::setTimeout(F32 d)
105{
106 mTimeout = d;
107}
108
109void LLWatchdogTimeout::start()
110{
111 // Order of operation is very impmortant here.
112 // After LLWatchdogEntry::start() is called
113 // LLWatchdogTimeout::isAlive() will be called asynchronously.
114 mTimer.start();
115 mTimer.setTimerExpirySec(mTimeout);
116 LLWatchdogEntry::start();
117}
118void LLWatchdogTimeout::stop()
119{
120 LLWatchdogEntry::stop();
121 mTimer.stop();
122}
123
124void LLWatchdogTimeout::ping()
125{
126 mTimer.setTimerExpirySec(mTimeout);
127}
128
129// LlWatchdog
130LLWatchdog::LLWatchdog() :
131 mSuspectsAccessMutex(NULL),
132 mTimer(NULL)
133{
134}
135
136LLWatchdog::~LLWatchdog()
137{
138}
139
140void LLWatchdog::add(LLWatchdogEntry* e)
141{
142 lockThread();
143 mSuspects.insert(e);
144 unlockThread();
145}
146
147void LLWatchdog::remove(LLWatchdogEntry* e)
148{
149 lockThread();
150 mSuspects.erase(e);
151 unlockThread();
152}
153
154void LLWatchdog::init()
155{
156 if(!mSuspectsAccessMutex && !mTimer)
157 {
158 mSuspectsAccessMutex = new LLMutex(NULL);
159 mTimer = new LLWatchdogTimerThread();
160 mTimer->setSleepTime(1000);
161 mTimer->start();
162 }
163}
164
165void LLWatchdog::cleanup()
166{
167 if(mTimer)
168 {
169 mTimer->stop();
170 delete mTimer;
171 }
172
173 if(mSuspectsAccessMutex)
174 {
175 delete mSuspectsAccessMutex;
176 }
177}
178
179void LLWatchdog::run()
180{
181 lockThread();
182
183 SuspectsRegistry::iterator result =
184 std::find_if(mSuspects.begin(),
185 mSuspects.end(),
186 std::not1(std::mem_fun(&LLWatchdogEntry::isAlive))
187 );
188
189 if(result != mSuspects.end())
190 {
191 // error!!!
192 if(mTimer)
193 {
194 mTimer->stop();
195 }
196
197 llinfos << "Watchdog detected error:" << llendl;
198#ifdef LL_WINDOWS
199 RaiseException(0,0,0,0);
200#else
201 raise(SIGQUIT);
202#endif
203 }
204
205 unlockThread();
206}
207
208void LLWatchdog::lockThread()
209{
210 if(mSuspectsAccessMutex != NULL)
211 {
212 mSuspectsAccessMutex->lock();
213 }
214}
215
216void LLWatchdog::unlockThread()
217{
218 if(mSuspectsAccessMutex != NULL)
219 {
220 mSuspectsAccessMutex->unlock();
221 }
222}
diff --git a/linden/indra/newview/llwatchdog.h b/linden/indra/newview/llwatchdog.h
new file mode 100644
index 0000000..96388bb
--- /dev/null
+++ b/linden/indra/newview/llwatchdog.h
@@ -0,0 +1,98 @@
1/**
2 * @file llthreadwatchdog.h
3 * @brief The LLThreadWatchdog class declaration
4 *
5 * $LicenseInfo:firstyear=2007&license=viewergpl$
6 *
7 * Copyright (c) 2007-2008, Linden Research, Inc.
8 *
9 * Second Life Viewer Source Code
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
12 * ("GPL"), unless you have obtained a separate licensing agreement
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
15 * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
16 *
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
19 * in the file doc/FLOSS-exception.txt in this software distribution, or
20 * online at http://secondlifegrid.net/programs/open_source/licensing/flossexception
21 *
22 * By copying, modifying or distributing this software, you acknowledge
23 * that you have read and understood your obligations described above,
24 * and agree to abide by those obligations.
25 *
26 * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
27 * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
28 * COMPLETENESS OR PERFORMANCE.
29 * $/LicenseInfo$
30 */
31
32#ifndef LL_LLTHREADWATCHDOG_H
33#define LL_LLTHREADWATCHDOG_H
34
35#ifndef LL_TIMER_H
36 #include "lltimer.h"
37#endif
38
39// LLWatchdogEntry is the interface used by the tasks that
40// need to be watched.
41class LLWatchdogEntry
42{
43public:
44 LLWatchdogEntry();
45 virtual ~LLWatchdogEntry();
46
47 // isAlive is accessed by the watchdog thread.
48 // This may mean that resources used by
49 // isAlive and other method may need synchronization.
50 virtual bool isAlive() const = 0;
51 virtual void start();
52 virtual void stop();
53};
54
55class LLWatchdogTimeout : public LLWatchdogEntry
56{
57public:
58 LLWatchdogTimeout();
59 virtual ~LLWatchdogTimeout();
60
61 /* virtual */ bool isAlive() const;
62 /* virtual */ void start();
63 /* virtual */ void stop();
64
65 void setTimeout(F32 d);
66 void ping();
67
68private:
69 LLTimer mTimer;
70 F32 mTimeout;
71};
72
73class LLWatchdogTimerThread; // Defined in the cpp
74class LLWatchdog : public LLSingleton<LLWatchdog>
75{
76public:
77 LLWatchdog();
78 ~LLWatchdog();
79
80 // Add an entry to the watchdog.
81 void add(LLWatchdogEntry* e);
82 void remove(LLWatchdogEntry* e);
83
84 void init();
85 void run();
86 void cleanup();
87
88private:
89 void lockThread();
90 void unlockThread();
91
92 typedef std::set<LLWatchdogEntry*> SuspectsRegistry;
93 SuspectsRegistry mSuspects;
94 LLMutex* mSuspectsAccessMutex;
95 LLWatchdogTimerThread* mTimer;
96};
97
98#endif // LL_LLTHREADWATCHDOG_H
diff --git a/linden/indra/newview/llwaterparammanager.cpp b/linden/indra/newview/llwaterparammanager.cpp
index f121d46..fb09fd8 100644
--- a/linden/indra/newview/llwaterparammanager.cpp
+++ b/linden/indra/newview/llwaterparammanager.cpp
@@ -75,7 +75,8 @@ LLWaterParamManager::LLWaterParamManager() :
75 mBlurMultiplier(0.1f, "blurMultiplier"), 75 mBlurMultiplier(0.1f, "blurMultiplier"),
76 mWave1Dir(.5f, .5f, "wave1Dir"), 76 mWave1Dir(.5f, .5f, "wave1Dir"),
77 mWave2Dir(.5f, .5f, "wave2Dir"), 77 mWave2Dir(.5f, .5f, "wave2Dir"),
78 mDensitySliderValue(1.0f) 78 mDensitySliderValue(1.0f),
79 mWaterFogKS(1.0f)
79{ 80{
80} 81}
81 82
@@ -86,7 +87,7 @@ LLWaterParamManager::~LLWaterParamManager()
86void LLWaterParamManager::loadAllPresets(const LLString& file_name) 87void LLWaterParamManager::loadAllPresets(const LLString& file_name)
87{ 88{
88 LLString path_name(gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS, "windlight/water", "")); 89 LLString path_name(gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS, "windlight/water", ""));
89 llinfos << "Loading water settings from " << path_name << llendl; 90 LL_INFOS2("AppInit", "Shaders") << "Loading water settings from " << path_name << LL_ENDL;
90 91
91 //mParamList.clear(); 92 //mParamList.clear();
92 93
@@ -96,7 +97,7 @@ void LLWaterParamManager::loadAllPresets(const LLString& file_name)
96 std::string name; 97 std::string name;
97 found = gDirUtilp->getNextFileInDir(path_name, "*.xml", name, false); 98 found = gDirUtilp->getNextFileInDir(path_name, "*.xml", name, false);
98 99
99 llinfos << "name: " << name << llendl; 100 LL_DEBUGS2("AppInit", "Shaders") << "name: " << name << LL_ENDL;
100 101
101 // if we have one 102 // if we have one
102 if(found) 103 if(found)
@@ -111,7 +112,7 @@ void LLWaterParamManager::loadAllPresets(const LLString& file_name)
111 std::string water_name = unescaped_name.substr(0, unescaped_name.size() - 4); 112 std::string water_name = unescaped_name.substr(0, unescaped_name.size() - 4);
112 113
113 LLString cur_path(gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS, "windlight/water", name)); 114 LLString cur_path(gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS, "windlight/water", name));
114 llinfos << "Loading water from " << cur_path << llendl; 115 LL_DEBUGS2("AppInit", "Shaders") << "Loading water from " << cur_path << LL_ENDL;
115 116
116 std::ifstream water_xml(cur_path.c_str()); 117 std::ifstream water_xml(cur_path.c_str());
117 if (water_xml) 118 if (water_xml)
@@ -255,8 +256,8 @@ void LLWaterParamManager::update(LLViewerCamera * cam)
255 if(gPipeline.canUseVertexShaders()) 256 if(gPipeline.canUseVertexShaders())
256 { 257 {
257 //transform water plane to eye space 258 //transform water plane to eye space
258 glh::vec3f norm(0, 0, 1); 259 glh::vec3f norm(0.f, 0.f, 1.f);
259 glh::vec3f p(0, 0, gAgent.getRegion()->getWaterHeight()+0.1f); 260 glh::vec3f p(0.f, 0.f, gAgent.getRegion()->getWaterHeight()+0.1f);
260 261
261 F32 modelView[16]; 262 F32 modelView[16];
262 for (U32 i = 0; i < 16; i++) 263 for (U32 i = 0; i < 16; i++)
@@ -406,7 +407,7 @@ F32 LLWaterParamManager::getFogDensity(void)
406 F32 fogDensity = mCurParams.getFloat("waterFogDensity", err); 407 F32 fogDensity = mCurParams.getFloat("waterFogDensity", err);
407 408
408 // modify if we're underwater 409 // modify if we're underwater
409 const F32 water_height = gAgent.getRegion()->getWaterHeight(); 410 const F32 water_height = gAgent.getRegion() ? gAgent.getRegion()->getWaterHeight() : 0.f;
410 F32 camera_height = gAgent.getCameraPositionAgent().mV[2]; 411 F32 camera_height = gAgent.getCameraPositionAgent().mV[2];
411 if(camera_height <= water_height) 412 if(camera_height <= water_height)
412 { 413 {
diff --git a/linden/indra/newview/llwaterparammanager.h b/linden/indra/newview/llwaterparammanager.h
index ad40c12..6c9ce3e 100644
--- a/linden/indra/newview/llwaterparammanager.h
+++ b/linden/indra/newview/llwaterparammanager.h
@@ -315,18 +315,16 @@ public:
315 F32 mDensitySliderValue; 315 F32 mDensitySliderValue;
316 316
317private: 317private:
318 // our parameter manager singleton instance
319 static LLWaterParamManager * sInstance;
320
321private:
322
323 LLVector4 mWaterPlane; 318 LLVector4 mWaterPlane;
324 F32 mWaterFogKS; 319 F32 mWaterFogKS;
320
321 // our parameter manager singleton instance
322 static LLWaterParamManager * sInstance;
325}; 323};
326 324
327inline void LLWaterParamManager::setDensitySliderValue(F32 val) 325inline void LLWaterParamManager::setDensitySliderValue(F32 val)
328{ 326{
329 val /= 10; 327 val /= 10.0f;
330 val = 1.0f - val; 328 val = 1.0f - val;
331 val *= val * val; 329 val *= val * val;
332// val *= val; 330// val *= val;
diff --git a/linden/indra/newview/llwearable.cpp b/linden/indra/newview/llwearable.cpp
index 9365eeb..6e8123a 100644
--- a/linden/indra/newview/llwearable.cpp
+++ b/linden/indra/newview/llwearable.cpp
@@ -185,7 +185,7 @@ const char* terse_F32_to_string( F32 f, char s[MAX_STRING] ) /* Flawfinder: ign
185 return r; 185 return r;
186} 186}
187 187
188BOOL LLWearable::exportFile( FILE* file ) 188BOOL LLWearable::exportFile( LLFILE* file )
189{ 189{
190 // header and version 190 // header and version
191 if( fprintf( file, "LLWearable version %d\n", mDefinitionVersion ) < 0 ) 191 if( fprintf( file, "LLWearable version %d\n", mDefinitionVersion ) < 0 )
@@ -266,7 +266,7 @@ BOOL LLWearable::exportFile( FILE* file )
266 266
267 267
268 268
269BOOL LLWearable::importFile( FILE* file ) 269BOOL LLWearable::importFile( LLFILE* file )
270{ 270{
271 // *NOTE: changing the type or size of this buffer will require 271 // *NOTE: changing the type or size of this buffer will require
272 // changes in the fscanf() code below. You would be better off 272 // changes in the fscanf() code below. You would be better off
@@ -852,7 +852,7 @@ void LLWearable::saveNewAsset()
852 mAssetID.toString(new_asset_id_string); 852 mAssetID.toString(new_asset_id_string);
853 char filename[LL_MAX_PATH]; /* Flawfinder: ignore */ 853 char filename[LL_MAX_PATH]; /* Flawfinder: ignore */
854 snprintf(filename, LL_MAX_PATH, "%s.wbl", gDirUtilp->getExpandedFilename(LL_PATH_CACHE,new_asset_id_string).c_str()); /* Flawfinder: ignore */ 854 snprintf(filename, LL_MAX_PATH, "%s.wbl", gDirUtilp->getExpandedFilename(LL_PATH_CACHE,new_asset_id_string).c_str()); /* Flawfinder: ignore */
855 FILE* fp = LLFile::fopen(filename, "wb"); /* Flawfinder: ignore */ 855 LLFILE* fp = LLFile::fopen(filename, "wb"); /* Flawfinder: ignore */
856 BOOL successful_save = FALSE; 856 BOOL successful_save = FALSE;
857 if(fp && exportFile(fp)) 857 if(fp && exportFile(fp))
858 { 858 {
diff --git a/linden/indra/newview/llwearable.h b/linden/indra/newview/llwearable.h
index aa4b3dd..63243eb 100644
--- a/linden/indra/newview/llwearable.h
+++ b/linden/indra/newview/llwearable.h
@@ -78,8 +78,8 @@ public:
78 void removeFromAvatar( BOOL set_by_user ) { LLWearable::removeFromAvatar( mType, set_by_user ); } 78 void removeFromAvatar( BOOL set_by_user ) { LLWearable::removeFromAvatar( mType, set_by_user ); }
79 static void removeFromAvatar( EWearableType type, BOOL set_by_user ); 79 static void removeFromAvatar( EWearableType type, BOOL set_by_user );
80 80
81 BOOL exportFile(FILE* file); 81 BOOL exportFile(LLFILE* file);
82 BOOL importFile(FILE* file); 82 BOOL importFile(LLFILE* file);
83 83
84 EWearableType getType() const { return mType; } 84 EWearableType getType() const { return mType; }
85 void setType( EWearableType type ) { mType = type; } 85 void setType( EWearableType type ) { mType = type; }
diff --git a/linden/indra/newview/llwearablelist.cpp b/linden/indra/newview/llwearablelist.cpp
index 01a2459..cabf20a 100644
--- a/linden/indra/newview/llwearablelist.cpp
+++ b/linden/indra/newview/llwearablelist.cpp
@@ -110,7 +110,7 @@ void LLWearableList::processGetAssetReply( const char* filename, const LLAssetID
110 if( status >= 0 ) 110 if( status >= 0 )
111 { 111 {
112 // read the file 112 // read the file
113 FILE* fp = LLFile::fopen(filename, "rb"); /*Flawfinder: ignore*/ 113 LLFILE* fp = LLFile::fopen(filename, "rb"); /*Flawfinder: ignore*/
114 if( !fp ) 114 if( !fp )
115 { 115 {
116 llinfos << "Bad Wearable Asset: unable to open file: '" << filename << "'" << llendl; 116 llinfos << "Bad Wearable Asset: unable to open file: '" << filename << "'" << llendl;
diff --git a/linden/indra/newview/llwebbrowserctrl.cpp b/linden/indra/newview/llwebbrowserctrl.cpp
index 710b7e1..1d187cb 100644
--- a/linden/indra/newview/llwebbrowserctrl.cpp
+++ b/linden/indra/newview/llwebbrowserctrl.cpp
@@ -43,8 +43,9 @@
43#include "llviewborder.h" 43#include "llviewborder.h"
44#include "llviewercontrol.h" 44#include "llviewercontrol.h"
45#include "llviewerwindow.h" 45#include "llviewerwindow.h"
46#include "llnotify.h"
46#include "llweb.h" 47#include "llweb.h"
47#include "llglimmediate.h" 48#include "llrender.h"
48 49
49// linden library includes 50// linden library includes
50#include "llfocusmgr.h" 51#include "llfocusmgr.h"
@@ -587,7 +588,7 @@ void LLWebBrowserCtrl::draw()
587 F32 max_v = ( F32 )mWebBrowserImage->getBrowserHeight() / ( F32 )mWebBrowserImage->getHeight(); 588 F32 max_v = ( F32 )mWebBrowserImage->getBrowserHeight() / ( F32 )mWebBrowserImage->getHeight();
588 589
589 // draw the browser 590 // draw the browser
590 gGL.blendFunc( GL_ONE, GL_ZERO ); 591 gGL.setSceneBlendType(LLRender::BT_REPLACE);
591 gGL.begin( LLVertexBuffer::QUADS ); 592 gGL.begin( LLVertexBuffer::QUADS );
592 { 593 {
593 // render using web browser reported width and height, instead of trying to invert GL scale 594 // render using web browser reported width and height, instead of trying to invert GL scale
@@ -604,7 +605,7 @@ void LLWebBrowserCtrl::draw()
604 gGL.vertex2i( mWebBrowserImage->getBrowserWidth(), 0 ); 605 gGL.vertex2i( mWebBrowserImage->getBrowserWidth(), 0 );
605 } 606 }
606 gGL.end(); 607 gGL.end();
607 gGL.blendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA ); 608 gGL.setSceneBlendType(LLRender::BT_ALPHA);
608 } 609 }
609 gGL.popMatrix(); 610 gGL.popMatrix();
610 611
@@ -762,6 +763,8 @@ void LLWebBrowserCtrl::onClickLinkNoFollow( const EventType& eventIn )
762 && !mOpenAppSLURLs) 763 && !mOpenAppSLURLs)
763 { 764 {
764 // block handling of this secondlife:///app/ URL 765 // block handling of this secondlife:///app/ URL
766 LLNotifyBox::showXml("UnableToOpenCommandURL");
767
765 return; 768 return;
766 } 769 }
767 770
diff --git a/linden/indra/newview/llwebbrowserctrl.h b/linden/indra/newview/llwebbrowserctrl.h
index e1b5357..95757f1 100644
--- a/linden/indra/newview/llwebbrowserctrl.h
+++ b/linden/indra/newview/llwebbrowserctrl.h
@@ -47,11 +47,13 @@ class LLWebBrowserCtrlEvent
47 }; 47 };
48 48
49 LLWebBrowserCtrlEvent( std::string stringValIn ) : 49 LLWebBrowserCtrlEvent( std::string stringValIn ) :
50 mIntVal(-1),
50 mStringVal( stringValIn ) 51 mStringVal( stringValIn )
51 { 52 {
52 }; 53 };
53 54
54 LLWebBrowserCtrlEvent( std::string stringValIn, std::string stringValExIn ) : 55 LLWebBrowserCtrlEvent( std::string stringValIn, std::string stringValExIn ) :
56 mIntVal(-1),
55 mStringVal( stringValIn ), 57 mStringVal( stringValIn ),
56 mStringValEx( stringValExIn ) 58 mStringValEx( stringValExIn )
57 { 59 {
diff --git a/linden/indra/newview/llwindebug.cpp b/linden/indra/newview/llwindebug.cpp
index 1b52a14..aba637c 100644
--- a/linden/indra/newview/llwindebug.cpp
+++ b/linden/indra/newview/llwindebug.cpp
@@ -35,7 +35,6 @@
35 35
36#include <tchar.h> 36#include <tchar.h>
37#include <tlhelp32.h> 37#include <tlhelp32.h>
38#include "llappviewer.h"
39#include "llwindebug.h" 38#include "llwindebug.h"
40#include "llviewercontrol.h" 39#include "llviewercontrol.h"
41#include "lldir.h" 40#include "lldir.h"
@@ -106,6 +105,8 @@ MINIDUMPWRITEDUMP f_mdwp = NULL;
106 105
107#undef UNICODE 106#undef UNICODE
108 107
108static LPTOP_LEVEL_EXCEPTION_FILTER gFilterFunc = NULL;
109
109HMODULE hDbgHelp; 110HMODULE hDbgHelp;
110 111
111// Tool Help functions. 112// Tool Help functions.
@@ -554,14 +555,13 @@ void LLMemoryReserve::release()
554static LLMemoryReserve gEmergencyMemoryReserve; 555static LLMemoryReserve gEmergencyMemoryReserve;
555 556
556// static 557// static
557BOOL LLWinDebug::setupExceptionHandler() 558void LLWinDebug::initExceptionHandler(LPTOP_LEVEL_EXCEPTION_FILTER filter_func)
558{ 559{
559 560
560 static BOOL s_first_run = TRUE; 561 static bool s_first_run = true;
561 // Load the dbghelp dll now, instead of waiting for the crash. 562 // Load the dbghelp dll now, instead of waiting for the crash.
562 // Less potential for stack mangling 563 // Less potential for stack mangling
563 564
564 BOOL ok = TRUE;
565 if (s_first_run) 565 if (s_first_run)
566 { 566 {
567 // First, try loading from the directory that the app resides in. 567 // First, try loading from the directory that the app resides in.
@@ -576,15 +576,7 @@ BOOL LLWinDebug::setupExceptionHandler()
576 576
577 if (!hDll) 577 if (!hDll)
578 { 578 {
579 llwarns << "Couldn't find dbghelp.dll!" << llendl; 579 LL_WARNS("AppInit") << "Couldn't find dbghelp.dll!" << LL_ENDL;
580
581 std::string msg = "Couldn't find dbghelp.dll at ";
582 msg += local_dll_name;
583 msg += "!\n";
584
585 //write_debug(msg.c_str());
586
587 ok = FALSE;
588 } 580 }
589 else 581 else
590 { 582 {
@@ -592,18 +584,15 @@ BOOL LLWinDebug::setupExceptionHandler()
592 584
593 if (!f_mdwp) 585 if (!f_mdwp)
594 { 586 {
595 //write_debug("No MiniDumpWriteDump!\n");
596 FreeLibrary(hDll); 587 FreeLibrary(hDll);
597 hDll = NULL; 588 hDll = NULL;
598 ok = FALSE;
599 } 589 }
600 } 590 }
601 591
602 gEmergencyMemoryReserve.reserve(); 592 gEmergencyMemoryReserve.reserve();
603 }
604 593
605 LPTOP_LEVEL_EXCEPTION_FILTER prev_filter; 594 s_first_run = false;
606 prev_filter = SetUnhandledExceptionFilter(LLWinDebug::handleException); 595 }
607 596
608 // Try to get Tool Help library functions. 597 // Try to get Tool Help library functions.
609 HMODULE hKernel32; 598 HMODULE hKernel32;
@@ -612,26 +601,44 @@ BOOL LLWinDebug::setupExceptionHandler()
612 Module32First_ = (MODULE32_FIRST)GetProcAddress(hKernel32, "Module32FirstW"); 601 Module32First_ = (MODULE32_FIRST)GetProcAddress(hKernel32, "Module32FirstW");
613 Module32Next_ = (MODULE32_NEST)GetProcAddress(hKernel32, "Module32NextW"); 602 Module32Next_ = (MODULE32_NEST)GetProcAddress(hKernel32, "Module32NextW");
614 603
615 if (s_first_run) 604 LPTOP_LEVEL_EXCEPTION_FILTER prev_filter;
605 prev_filter = SetUnhandledExceptionFilter(filter_func);
606
607 if(prev_filter != gFilterFunc)
616 { 608 {
617 // We're fine, this is the first run. 609 LL_WARNS("AppInit")
618 s_first_run = FALSE; 610 << "Replacing unknown exception (" << (void *)prev_filter << ") with (" << (void *)filter_func << ") !" << LL_ENDL;
619 return ok;
620 } 611 }
621 if (!prev_filter) 612
613 gFilterFunc = filter_func;
614}
615
616bool LLWinDebug::checkExceptionHandler()
617{
618 bool ok = true;
619 LPTOP_LEVEL_EXCEPTION_FILTER prev_filter;
620 prev_filter = SetUnhandledExceptionFilter(gFilterFunc);
621
622 if (prev_filter != gFilterFunc)
622 { 623 {
623 llwarns << "Our exception handler (" << (void *)LLWinDebug::handleException << ") replaced with NULL!" << llendl; 624 LL_WARNS("AppInit") << "Our exception handler (" << (void *)gFilterFunc << ") replaced with " << prev_filter << "!" << LL_ENDL;
624 ok = FALSE; 625 ok = false;
625 } 626 }
626 if (prev_filter != LLWinDebug::handleException) 627
628 if (prev_filter == NULL)
627 { 629 {
628 llwarns << "Our exception handler (" << (void *)LLWinDebug::handleException << ") replaced with " << prev_filter << "!" << llendl;
629 ok = FALSE; 630 ok = FALSE;
631 if (gFilterFunc == NULL)
632 {
633 LL_WARNS("AppInit") << "Exception handler uninitialized." << LL_ENDL;
634 }
635 else
636 {
637 LL_WARNS("AppInit") << "Our exception handler (" << (void *)gFilterFunc << ") replaced with NULL!" << LL_ENDL;
638 }
630 } 639 }
631 640
632 return ok; 641 return ok;
633 // Internal builds don't mess with exception handling.
634 //return TRUE;
635} 642}
636 643
637void LLWinDebug::writeDumpToFile(MINIDUMP_TYPE type, MINIDUMP_EXCEPTION_INFORMATION *ExInfop, const char *filename) 644void LLWinDebug::writeDumpToFile(MINIDUMP_TYPE type, MINIDUMP_EXCEPTION_INFORMATION *ExInfop, const char *filename)
@@ -644,7 +651,7 @@ void LLWinDebug::writeDumpToFile(MINIDUMP_TYPE type, MINIDUMP_EXCEPTION_INFORMAT
644 else 651 else
645 { 652 {
646 std::string dump_path = gDirUtilp->getExpandedFilename(LL_PATH_LOGS, 653 std::string dump_path = gDirUtilp->getExpandedFilename(LL_PATH_LOGS,
647 filename); 654 filename);
648 655
649 HANDLE hFile = CreateFileA(dump_path.c_str(), 656 HANDLE hFile = CreateFileA(dump_path.c_str(),
650 GENERIC_WRITE, 657 GENERIC_WRITE,
@@ -672,20 +679,26 @@ void LLWinDebug::writeDumpToFile(MINIDUMP_TYPE type, MINIDUMP_EXCEPTION_INFORMAT
672} 679}
673 680
674// static 681// static
675LONG LLWinDebug::handleException(struct _EXCEPTION_POINTERS *exception_infop) 682void LLWinDebug::generateCrashStacks(struct _EXCEPTION_POINTERS *exception_infop)
676{ 683{
677 // *NOTE:Mani - This method is no longer the initial exception handler. 684 // *NOTE:Mani - This method is no longer the exception handler.
678 // It is called from viewer_windows_exception_handler() and other places. 685 // Its called from viewer_windows_exception_handler() and other places.
679 686
680 // 687 //
681 // Let go of a bunch of reserved memory to give library calls etc 688 // Let go of a bunch of reserved memory to give library calls etc
682 // a chance to execute normally in the case that we ran out of 689 // a chance to execute normally in the case that we ran out of
683 // memory. 690 // memory.
684 // 691 //
685 gEmergencyMemoryReserve.release(); 692 LLSD info;
693 std::string dump_path = gDirUtilp->getExpandedFilename(LL_PATH_LOGS,
694 "SecondLifeException");
695 std::string log_path = dump_path + ".log";
686 696
687 if (exception_infop) 697 if (exception_infop)
688 { 698 {
699 // Since there is exception info... Release the hounds.
700 gEmergencyMemoryReserve.release();
701
689 if(gSavedSettings.getControl("SaveMinidump") != NULL && gSavedSettings.getBOOL("SaveMinidump")) 702 if(gSavedSettings.getControl("SaveMinidump") != NULL && gSavedSettings.getBOOL("SaveMinidump"))
690 { 703 {
691 _MINIDUMP_EXCEPTION_INFORMATION ExInfo; 704 _MINIDUMP_EXCEPTION_INFORMATION ExInfo;
@@ -698,67 +711,34 @@ LONG LLWinDebug::handleException(struct _EXCEPTION_POINTERS *exception_infop)
698 writeDumpToFile((MINIDUMP_TYPE)(MiniDumpWithDataSegs | MiniDumpWithIndirectlyReferencedMemory), &ExInfo, "SecondLifePlus.dmp"); 711 writeDumpToFile((MINIDUMP_TYPE)(MiniDumpWithDataSegs | MiniDumpWithIndirectlyReferencedMemory), &ExInfo, "SecondLifePlus.dmp");
699 } 712 }
700 713
701
702 std::string dump_path = gDirUtilp->getExpandedFilename(LL_PATH_LOGS,
703 "SecondLifeException");
704
705 std::string log_path = dump_path + ".log";
706
707 LLSD info;
708 info = Get_Exception_Info(exception_infop); 714 info = Get_Exception_Info(exception_infop);
715 }
709 716
717 LLSD threads;
718 std::vector<DWORD> thread_ids;
719 GetProcessThreadIDs(GetCurrentProcessId(), thread_ids);
710 720
711 LLSD threads; 721 for(std::vector<DWORD>::iterator th_itr = thread_ids.begin();
712 std::vector<DWORD> thread_ids; 722 th_itr != thread_ids.end();
713 GetProcessThreadIDs(GetCurrentProcessId(), thread_ids); 723 ++th_itr)
714 724 {
715 for(std::vector<DWORD>::iterator th_itr = thread_ids.begin(); 725 LLSD thread_info;
716 th_itr != thread_ids.end(); 726 if(*th_itr != GetCurrentThreadId())
717 ++th_itr)
718 { 727 {
719 LLSD thread_info; 728 GetThreadCallStack(*th_itr, thread_info);
720 if(*th_itr != GetCurrentThreadId())
721 {
722 GetThreadCallStack(*th_itr, thread_info);
723 }
724
725 if(thread_info)
726 {
727
728 threads[llformat("ID %d", *th_itr)] = thread_info;
729 }
730 } 729 }
731 730
731 if(thread_info)
732 {
733 threads[llformat("ID %d", *th_itr)] = thread_info;
734 }
735 }
732 736
733 info["Threads"] = threads; 737 info["Threads"] = threads;
734
735 if (info)
736 {
737 std::ofstream out_file(log_path.c_str());
738 LLSDSerialize::toPrettyXML(info, out_file);
739 out_file.close();
740 }
741 }
742 else
743 {
744 // We're calling this due to a network error, not due to an actual exception.
745 // It doesn't realy matter what we return.
746 return EXCEPTION_CONTINUE_SEARCH;
747 }
748
749 //handle viewer crash must be called here since
750 //we don't return handling of the application
751 //back to the process.
752 LLAppViewer::handleViewerCrash();
753 738
754 // 739 std::ofstream out_file(log_path.c_str());
755 // At this point, we always want to exit the app. There's no graceful 740 LLSDSerialize::toPrettyXML(info, out_file);
756 // recovery for an unhandled exception. 741 out_file.close();
757 //
758 // Just kill the process.
759 LONG retval = EXCEPTION_EXECUTE_HANDLER;
760
761 return retval;
762} 742}
763 743
764#endif 744#endif
diff --git a/linden/indra/newview/llwindebug.h b/linden/indra/newview/llwindebug.h
index b11cdf6..cf15fae 100644
--- a/linden/indra/newview/llwindebug.h
+++ b/linden/indra/newview/llwindebug.h
@@ -38,10 +38,36 @@
38class LLWinDebug 38class LLWinDebug
39{ 39{
40public: 40public:
41 static BOOL setupExceptionHandler();
42 41
43 static LONG WINAPI handleException(struct _EXCEPTION_POINTERS *pExceptionInfo); 42
43 /**
44 * @brief initialize the llwindebug exception filter callback
45 *
46 * Hand a windows unhandled exception filter to LLWinDebug
47 * This method should only be called to change the
48 * exception filter used by llwindebug.
49 *
50 * Setting filter_func to NULL will clear any custom filters.
51 **/
52 static void initExceptionHandler(LPTOP_LEVEL_EXCEPTION_FILTER filter_func);
53
54 /**
55 * @brief check the status of the exception filter.
56 *
57 * Resets unhandled exception filter to the filter specified
58 * w/ initExceptionFilter).
59 * Returns false if the exception filter was modified.
60 *
61 * *NOTE:Mani In the past mozlib has been accused of
62 * overriding the exception filter. If the mozlib filter
63 * is required, perhaps we can chain calls from our
64 * filter to mozlib's.
65 **/
66 static bool checkExceptionHandler();
67
68 static void generateCrashStacks(struct _EXCEPTION_POINTERS *pExceptionInfo = NULL);
44 static void writeDumpToFile(MINIDUMP_TYPE type, MINIDUMP_EXCEPTION_INFORMATION *ExInfop, const char *filename); 69 static void writeDumpToFile(MINIDUMP_TYPE type, MINIDUMP_EXCEPTION_INFORMATION *ExInfop, const char *filename);
70private:
45}; 71};
46 72
47#endif // LL_LLWINDEBUG_H 73#endif // LL_LLWINDEBUG_H
diff --git a/linden/indra/newview/llwlparammanager.cpp b/linden/indra/newview/llwlparammanager.cpp
index 9f59947..9f23b37 100644
--- a/linden/indra/newview/llwlparammanager.cpp
+++ b/linden/indra/newview/llwlparammanager.cpp
@@ -111,7 +111,7 @@ void LLWLParamManager::loadPresets(const LLString& file_name)
111 if(file_name != "") 111 if(file_name != "")
112 { 112 {
113 LLString path_name(gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS, "windlight", file_name)); 113 LLString path_name(gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS, "windlight", file_name));
114 llinfos << "Loading WindLight settings from " << path_name << llendl; 114 LL_INFOS2("AppInit", "Shaders") << "Loading WindLight settings from " << path_name << LL_ENDL;
115 115
116 llifstream presetsXML(path_name.c_str()); 116 llifstream presetsXML(path_name.c_str());
117 117
@@ -137,7 +137,7 @@ void LLWLParamManager::loadPresets(const LLString& file_name)
137 else 137 else
138 { 138 {
139 LLString path_name(gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS, "windlight/skies", "")); 139 LLString path_name(gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS, "windlight/skies", ""));
140 llinfos << "Loading WindLight settings from " << path_name << llendl; 140 LL_INFOS2("AppInit", "Shaders") << "Loading WindLight settings from " << path_name << LL_ENDL;
141 141
142 //mParamList.clear(); 142 //mParamList.clear();
143 143
@@ -147,7 +147,7 @@ void LLWLParamManager::loadPresets(const LLString& file_name)
147 std::string name; 147 std::string name;
148 found = gDirUtilp->getNextFileInDir(path_name, "*.xml", name, false); 148 found = gDirUtilp->getNextFileInDir(path_name, "*.xml", name, false);
149 149
150 llinfos << "name: " << name << llendl; 150 LL_DEBUGS2("AppInit", "Shaders") << "name: " << name << LL_ENDL;
151 151
152 // if we have one 152 // if we have one
153 if(found) 153 if(found)
@@ -162,7 +162,7 @@ void LLWLParamManager::loadPresets(const LLString& file_name)
162 std::string sky_name = unescaped_name.substr(0, unescaped_name.size() - 4); 162 std::string sky_name = unescaped_name.substr(0, unescaped_name.size() - 4);
163 163
164 LLString cur_path(gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS, "windlight/skies", name)); 164 LLString cur_path(gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS, "windlight/skies", name));
165 llinfos << "Loading sky from " << cur_path << llendl; 165 LL_DEBUGS2("AppInit", "Shaders") << "Loading sky from " << cur_path << LL_ENDL;
166 166
167 std::ifstream sky_xml(cur_path.c_str()); 167 std::ifstream sky_xml(cur_path.c_str());
168 if (sky_xml) 168 if (sky_xml)
@@ -299,7 +299,7 @@ void LLWLParamManager::propagateParameters(void)
299 LLVector4 sunDir; 299 LLVector4 sunDir;
300 LLVector4 moonDir; 300 LLVector4 moonDir;
301 301
302 // set the sun direction from mSunAngle and mEastAngle 302 // set the sun direction from SunAngle and EastAngle
303 F32 sinTheta = sin(mCurParams.getEastAngle()); 303 F32 sinTheta = sin(mCurParams.getEastAngle());
304 F32 cosTheta = cos(mCurParams.getEastAngle()); 304 F32 cosTheta = cos(mCurParams.getEastAngle());
305 305
diff --git a/linden/indra/newview/llwlparammanager.h b/linden/indra/newview/llwlparammanager.h
index bfb84e9..72b888d 100644
--- a/linden/indra/newview/llwlparammanager.h
+++ b/linden/indra/newview/llwlparammanager.h
@@ -199,8 +199,6 @@ public:
199public: 199public:
200 200
201 // helper variables 201 // helper variables
202 F32 mSunAngle;
203 F32 mEastAngle;
204 LLWLAnimator mAnimator; 202 LLWLAnimator mAnimator;
205 203
206 /// actual direction of the sun 204 /// actual direction of the sun
@@ -217,9 +215,6 @@ public:
217 // list of params and how they're cycled for days 215 // list of params and how they're cycled for days
218 LLWLDayCycle mDay; 216 LLWLDayCycle mDay;
219 217
220 // length of the day in seconds
221 F32 mLengthOfDay;
222
223 LLWLParamSet mCurParams; 218 LLWLParamSet mCurParams;
224 219
225 /// Sun Delta Terrain tweak variables. 220 /// Sun Delta Terrain tweak variables.
diff --git a/linden/indra/newview/llwlparamset.h b/linden/indra/newview/llwlparamset.h
index 6fa0bff..ed3453d 100644
--- a/linden/indra/newview/llwlparamset.h
+++ b/linden/indra/newview/llwlparamset.h
@@ -132,18 +132,10 @@ public:
132 /// get the star brightness value; 132 /// get the star brightness value;
133 F32 getStarBrightness(); 133 F32 getStarBrightness();
134 134
135 /// set the star's brightness
136 /// \param val brightness value
137 void setSunAngle(F32 val); 135 void setSunAngle(F32 val);
138
139 /// get the star brightness value;
140 F32 getSunAngle(); 136 F32 getSunAngle();
141 137
142 /// set the star's brightness
143 /// \param val brightness value
144 void setEastAngle(F32 val); 138 void setEastAngle(F32 val);
145
146 /// get the star brightness value;
147 F32 getEastAngle(); 139 F32 getEastAngle();
148 140
149 141
diff --git a/linden/indra/newview/llworld.cpp b/linden/indra/newview/llworld.cpp
index 8c95260..27d7513 100644
--- a/linden/indra/newview/llworld.cpp
+++ b/linden/indra/newview/llworld.cpp
@@ -83,22 +83,25 @@ const F32 LLWorld::mWidthInMeters = mWidth * mScale;
83// 83//
84 84
85// allocate the stack 85// allocate the stack
86LLWorld::LLWorld() 86LLWorld::LLWorld() :
87 mLandFarClip(DEFAULT_FAR_PLANE),
88 mLastPacketsIn(0),
89 mLastPacketsOut(0),
90 mLastPacketsLost(0),
91 mMinRegionX(0),
92 mMaxRegionX(0),
93 mMinRegionY(0),
94 mMaxRegionY(0),
95 mSpaceTimeUSec(0)
87{ 96{
88 mSpaceTimeUSec = 0; 97 for (S32 i = 0; i < 8; i++)
89 mLastPacketsIn = 0;
90 mLastPacketsOut = 0;
91 mLastPacketsLost = 0;
92 mLandFarClip = DEFAULT_FAR_PLANE;
93
94 if (gNoRender)
95 { 98 {
96 return; 99 mEdgeWaterObjects[i] = NULL;
97 } 100 }
98 101
99 for (S32 i = 0; i < 8; i++) 102 if (gNoRender)
100 { 103 {
101 mEdgeWaterObjects[i] = NULL; 104 return;
102 } 105 }
103 106
104 LLPointer<LLImageRaw> raw = new LLImageRaw(1,1,4); 107 LLPointer<LLImageRaw> raw = new LLImageRaw(1,1,4);
@@ -1112,6 +1115,10 @@ void process_region_handshake(LLMessageSystem* msg, void** user_data)
1112 1115
1113void send_agent_pause() 1116void send_agent_pause()
1114{ 1117{
1118 // *NOTE:Mani Pausing the mainloop timeout. Otherwise a long modal event may cause
1119 // the thread monitor to timeout.
1120 LLAppViewer::instance()->stopMainloopTimeout();
1121
1115 // Note: used to check for LLWorld initialization before it became a singleton. 1122 // Note: used to check for LLWorld initialization before it became a singleton.
1116 // Rather than just remove this check I'm changing it to assure that the message 1123 // Rather than just remove this check I'm changing it to assure that the message
1117 // system has been initialized. -MG 1124 // system has been initialized. -MG
@@ -1167,6 +1174,8 @@ void send_agent_resume()
1167 1174
1168 // Reset the FPS counter to avoid an invalid fps 1175 // Reset the FPS counter to avoid an invalid fps
1169 LLViewerStats::getInstance()->mFPSStat.start(); 1176 LLViewerStats::getInstance()->mFPSStat.start();
1177
1178 LLAppViewer::instance()->startMainloopTimeout();
1170} 1179}
1171 1180
1172 1181
diff --git a/linden/indra/newview/llworldmap.cpp b/linden/indra/newview/llworldmap.cpp
index 28ae94a..231f5dc 100644
--- a/linden/indra/newview/llworldmap.cpp
+++ b/linden/indra/newview/llworldmap.cpp
@@ -160,6 +160,11 @@ void LLWorldMap::reset()
160 160
161 mNeighborMapWidth = 0; 161 mNeighborMapWidth = 0;
162 mNeighborMapHeight = 0; 162 mNeighborMapHeight = 0;
163
164 for (S32 i=0; i<MAP_SIM_IMAGE_TYPES; i++)
165 {
166 mMapLayers[i].clear();
167 }
163} 168}
164 169
165void LLWorldMap::eraseItems() 170void LLWorldMap::eraseItems()
@@ -172,7 +177,6 @@ void LLWorldMap::eraseItems()
172 mInfohubs.clear(); 177 mInfohubs.clear();
173 mPGEvents.clear(); 178 mPGEvents.clear();
174 mMatureEvents.clear(); 179 mMatureEvents.clear();
175 mPopular.clear();
176 mLandForSale.clear(); 180 mLandForSale.clear();
177 mClassifieds.clear(); 181 mClassifieds.clear();
178 } 182 }
@@ -299,12 +303,6 @@ void LLWorldMap::setCurrentLayer(S32 layer, bool request_layer)
299 sendItemRequest(MAP_ITEM_MATURE_EVENT); 303 sendItemRequest(MAP_ITEM_MATURE_EVENT);
300 } 304 }
301 305
302 if (mPopular.size() == 0)
303 {
304 // Request for popular
305 sendItemRequest(MAP_ITEM_POPULAR);
306 }
307
308 if (mLandForSale.size() == 0) 306 if (mLandForSale.size() == 0)
309 { 307 {
310 // Request for Land For Sale 308 // Request for Land For Sale
@@ -763,12 +761,6 @@ void LLWorldMap::processMapItemReply(LLMessageSystem* msg, void**)
763 } 761 }
764 break; 762 break;
765 } 763 }
766 case MAP_ITEM_POPULAR: // popular
767 {
768 new_item.mPosGlobal.mdV[VZ] = (F64)extra2;
769 LLWorldMap::getInstance()->mPopular.push_back(new_item);
770 break;
771 }
772 case MAP_ITEM_LAND_FOR_SALE: // land for sale 764 case MAP_ITEM_LAND_FOR_SALE: // land for sale
773 { 765 {
774 new_item.mToolTip = llformat("%d sq. m. L$%d", new_item.mExtra, new_item.mExtra2); 766 new_item.mToolTip = llformat("%d sq. m. L$%d", new_item.mExtra, new_item.mExtra2);
diff --git a/linden/indra/newview/llworldmap.h b/linden/indra/newview/llworldmap.h
index 041dfc0..3f3a8e9 100644
--- a/linden/indra/newview/llworldmap.h
+++ b/linden/indra/newview/llworldmap.h
@@ -191,7 +191,6 @@ public:
191 item_info_list_t mInfohubs; 191 item_info_list_t mInfohubs;
192 item_info_list_t mPGEvents; 192 item_info_list_t mPGEvents;
193 item_info_list_t mMatureEvents; 193 item_info_list_t mMatureEvents;
194 item_info_list_t mPopular;
195 item_info_list_t mLandForSale; 194 item_info_list_t mLandForSale;
196 item_info_list_t mClassifieds; 195 item_info_list_t mClassifieds;
197 196
diff --git a/linden/indra/newview/llworldmapview.cpp b/linden/indra/newview/llworldmapview.cpp
index 1cc4921..a9e1061 100644
--- a/linden/indra/newview/llworldmapview.cpp
+++ b/linden/indra/newview/llworldmapview.cpp
@@ -38,7 +38,7 @@
38#include "llmath.h" // clampf() 38#include "llmath.h" // clampf()
39#include "llregionhandle.h" 39#include "llregionhandle.h"
40#include "lleventflags.h" 40#include "lleventflags.h"
41#include "llglimmediate.h" 41#include "llrender.h"
42 42
43#include "llagent.h" 43#include "llagent.h"
44#include "llcallingcard.h" 44#include "llcallingcard.h"
@@ -85,7 +85,6 @@ LLUIImagePtr LLWorldMapView::sTrackCircleImage = NULL;
85LLUIImagePtr LLWorldMapView::sTrackArrowImage = NULL; 85LLUIImagePtr LLWorldMapView::sTrackArrowImage = NULL;
86 86
87LLUIImagePtr LLWorldMapView::sClassifiedsImage = NULL; 87LLUIImagePtr LLWorldMapView::sClassifiedsImage = NULL;
88LLUIImagePtr LLWorldMapView::sPopularImage = NULL;
89LLUIImagePtr LLWorldMapView::sForSaleImage = NULL; 88LLUIImagePtr LLWorldMapView::sForSaleImage = NULL;
90 89
91F32 LLWorldMapView::sThresholdA = 48.f; 90F32 LLWorldMapView::sThresholdA = 48.f;
@@ -111,22 +110,21 @@ F32 CONE_SIZE = 0.6f;
111 110
112void LLWorldMapView::initClass() 111void LLWorldMapView::initClass()
113{ 112{
114 LLUUID image_id;
115
116 sAvatarYouSmallImage = LLUI::getUIImage("map_avatar_you_8.tga"); 113 sAvatarYouSmallImage = LLUI::getUIImage("map_avatar_you_8.tga");
117 sAvatarSmallImage = LLUI::getUIImage("map_avatar_8.tga"); 114 sAvatarSmallImage = LLUI::getUIImage("map_avatar_8.tga");
118 sAvatarLargeImage = LLUI::getUIImage("map_avatar_16.tga"); 115 sAvatarLargeImage = LLUI::getUIImage("map_avatar_16.tga");
119 sAvatarAboveImage = LLUI::getUIImage("map_avatar_above_8.tga"); 116 sAvatarAboveImage = LLUI::getUIImage("map_avatar_above_8.tga");
120 sAvatarBelowImage = LLUI::getUIImage("map_avatar_below_8.tga"); 117 sAvatarBelowImage = LLUI::getUIImage("map_avatar_below_8.tga");
118
121 sHomeImage = LLUI::getUIImage("map_home.tga"); 119 sHomeImage = LLUI::getUIImage("map_home.tga");
122 sTelehubImage = LLUI::getUIImage("map_telehub.tga"); 120 sTelehubImage = LLUI::getUIImage("map_telehub.tga");
123 sInfohubImage = LLUI::getUIImage("map_infohub.tga"); 121 sInfohubImage = LLUI::getUIImage("map_infohub.tga");
124 sEventImage = LLUI::getUIImage("map_event.tga"); 122 sEventImage = LLUI::getUIImage("map_event.tga");
125 sEventMatureImage = LLUI::getUIImage("map_event_mature.tga"); 123 sEventMatureImage = LLUI::getUIImage("map_event_mature.tga");
124
126 sTrackCircleImage = LLUI::getUIImage("map_track_16.tga"); 125 sTrackCircleImage = LLUI::getUIImage("map_track_16.tga");
127 sTrackArrowImage = LLUI::getUIImage("direction_arrow.tga"); 126 sTrackArrowImage = LLUI::getUIImage("direction_arrow.tga");
128 sClassifiedsImage = LLUI::getUIImage("icon_top_pick.tga"); 127 sClassifiedsImage = LLUI::getUIImage("icon_top_pick.tga");
129 sPopularImage = LLUI::getUIImage("icon_popular.tga");
130 sForSaleImage = LLUI::getUIImage("icon_for_sale.tga"); 128 sForSaleImage = LLUI::getUIImage("icon_for_sale.tga");
131} 129}
132 130
@@ -138,15 +136,16 @@ void LLWorldMapView::cleanupClass()
138 sAvatarLargeImage = NULL; 136 sAvatarLargeImage = NULL;
139 sAvatarAboveImage = NULL; 137 sAvatarAboveImage = NULL;
140 sAvatarBelowImage = NULL; 138 sAvatarBelowImage = NULL;
139
141 sTelehubImage = NULL; 140 sTelehubImage = NULL;
142 sInfohubImage = NULL; 141 sInfohubImage = NULL;
143 sHomeImage = NULL; 142 sHomeImage = NULL;
144 sEventImage = NULL; 143 sEventImage = NULL;
145 sEventMatureImage = NULL; 144 sEventMatureImage = NULL;
145
146 sTrackCircleImage = NULL; 146 sTrackCircleImage = NULL;
147 sTrackArrowImage = NULL; 147 sTrackArrowImage = NULL;
148 sClassifiedsImage = NULL; 148 sClassifiedsImage = NULL;
149 sPopularImage = NULL;
150 sForSaleImage = NULL; 149 sForSaleImage = NULL;
151} 150}
152 151
@@ -303,17 +302,17 @@ void LLWorldMapView::draw()
303 302
304 // Clear the background alpha to 0 303 // Clear the background alpha to 0
305 gGL.flush(); 304 gGL.flush();
306 glColorMask(FALSE, FALSE, FALSE, TRUE); 305 gGL.setColorMask(false, true);
307 glAlphaFunc(GL_GEQUAL, 0.00f); 306 gGL.setAlphaRejectSettings(LLRender::CF_GREATER_EQUAL, 0.f);
308 gGL.blendFunc(GL_ONE, GL_ZERO); 307 gGL.setSceneBlendType(LLRender::BT_REPLACE);
309 gGL.color4f(0.0f, 0.0f, 0.0f, 0.0f); 308 gGL.color4f(0.0f, 0.0f, 0.0f, 0.0f);
310 gl_rect_2d(0, height, width, 0); 309 gl_rect_2d(0, height, width, 0);
311 } 310 }
312 311
313 gGL.flush(); 312 gGL.flush();
314 glAlphaFunc(GL_GEQUAL, 0.01f); 313 gGL.setAlphaRejectSettings(LLRender::CF_DEFAULT);
315 glColorMask(TRUE, TRUE, TRUE, TRUE); 314 gGL.setColorMask(true, true);
316 gGL.blendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); 315 gGL.setSceneBlendType(LLRender::BT_ALPHA);
317 316
318 F32 layer_alpha = 1.f; 317 F32 layer_alpha = 1.f;
319 318
@@ -378,7 +377,7 @@ void LLWorldMapView::draw()
378 // Draw map image into RGB 377 // Draw map image into RGB
379 //gGL.blendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); 378 //gGL.blendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
380 gGL.flush(); 379 gGL.flush();
381 glColorMask(TRUE, TRUE, TRUE, FALSE); 380 gGL.setColorMask(true, false);
382 gGL.color4f(1.f, 1.f, 1.f, layer_alpha); 381 gGL.color4f(1.f, 1.f, 1.f, layer_alpha);
383 382
384 gGL.begin(LLVertexBuffer::QUADS); 383 gGL.begin(LLVertexBuffer::QUADS);
@@ -394,7 +393,7 @@ void LLWorldMapView::draw()
394 393
395 // draw an alpha of 1 where the sims are visible 394 // draw an alpha of 1 where the sims are visible
396 gGL.flush(); 395 gGL.flush();
397 glColorMask(FALSE, FALSE, FALSE, TRUE); 396 gGL.setColorMask(false, true);
398 gGL.color4f(1.f, 1.f, 1.f, 1.f); 397 gGL.color4f(1.f, 1.f, 1.f, 1.f);
399 398
400 gGL.begin(LLVertexBuffer::QUADS); 399 gGL.begin(LLVertexBuffer::QUADS);
@@ -410,8 +409,8 @@ void LLWorldMapView::draw()
410 } 409 }
411 410
412 gGL.flush(); 411 gGL.flush();
413 glAlphaFunc(GL_GEQUAL, 0.01f); 412 gGL.setAlphaRejectSettings(LLRender::CF_DEFAULT);
414 glColorMask(TRUE, TRUE, TRUE, TRUE); 413 gGL.setColorMask(true, true);
415 414
416#if 1 415#if 1
417 F32 sim_alpha = 1.f; 416 F32 sim_alpha = 1.f;
@@ -534,7 +533,7 @@ void LLWorldMapView::draw()
534 LLGLSUIDefault gls_ui; 533 LLGLSUIDefault gls_ui;
535 LLViewerImage::bindTexture(simimage); 534 LLViewerImage::bindTexture(simimage);
536 535
537 gGL.blendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); 536 gGL.setSceneBlendType(LLRender::BT_ALPHA);
538 F32 alpha = sim_alpha * info->mAlpha; 537 F32 alpha = sim_alpha * info->mAlpha;
539 gGL.color4f(1.f, 1.0f, 1.0f, alpha); 538 gGL.color4f(1.f, 1.0f, 1.0f, alpha);
540 539
@@ -569,8 +568,8 @@ void LLWorldMapView::draw()
569 { 568 {
570 // draw an alpha of 1 where the sims are visible (except NULL sims) 569 // draw an alpha of 1 where the sims are visible (except NULL sims)
571 gGL.flush(); 570 gGL.flush();
572 gGL.blendFunc(GL_ONE, GL_ZERO); 571 gGL.setSceneBlendType(LLRender::BT_REPLACE);
573 glColorMask(FALSE, FALSE, FALSE, TRUE); 572 gGL.setColorMask(false, true);
574 gGL.color4f(1.f, 1.f, 1.f, 1.f); 573 gGL.color4f(1.f, 1.f, 1.f, 1.f);
575 574
576 LLGLSNoTexture gls_no_texture; 575 LLGLSNoTexture gls_no_texture;
@@ -582,14 +581,14 @@ void LLWorldMapView::draw()
582 gGL.end(); 581 gGL.end();
583 582
584 gGL.flush(); 583 gGL.flush();
585 glColorMask(TRUE, TRUE, TRUE, TRUE); 584 gGL.setColorMask(true, true);
586 } 585 }
587 } 586 }
588 587
589 if (info->mAccess == SIM_ACCESS_DOWN) 588 if (info->mAccess == SIM_ACCESS_DOWN)
590 { 589 {
591 // Draw a transparent red square over down sims 590 // Draw a transparent red square over down sims
592 gGL.blendFunc(GL_DST_ALPHA, GL_SRC_ALPHA); 591 gGL.blendFunc(LLRender::BF_DEST_ALPHA, LLRender::BF_SOURCE_ALPHA);
593 gGL.color4f(0.2f, 0.0f, 0.0f, 0.4f); 592 gGL.color4f(0.2f, 0.0f, 0.0f, 0.4f);
594 593
595 LLGLSNoTexture gls_no_texture; 594 LLGLSNoTexture gls_no_texture;
@@ -606,7 +605,7 @@ void LLWorldMapView::draw()
606 && info->mAccess > SIM_ACCESS_PG 605 && info->mAccess > SIM_ACCESS_PG
607 && gAgent.isTeen()) 606 && gAgent.isTeen())
608 { 607 {
609 gGL.blendFunc(GL_DST_ALPHA, GL_ZERO); 608 gGL.blendFunc(LLRender::BF_DEST_ALPHA, LLRender::BF_ZERO);
610 609
611 LLGLSNoTexture gls_no_texture; 610 LLGLSNoTexture gls_no_texture;
612 gGL.color3f(1.f, 0.f, 0.f); 611 gGL.color3f(1.f, 0.f, 0.f);
@@ -667,14 +666,14 @@ void LLWorldMapView::draw()
667 LLGLSUIDefault gls_ui; 666 LLGLSUIDefault gls_ui;
668 { 667 {
669 LLGLSNoTexture gls_no_texture; 668 LLGLSNoTexture gls_no_texture;
670 glAlphaFunc(GL_GEQUAL, 0.0f); 669 gGL.setAlphaRejectSettings(LLRender::CF_GREATER_EQUAL, 0.f);
671 gGL.blendFunc(GL_ONE_MINUS_DST_ALPHA, GL_DST_ALPHA); 670 gGL.blendFunc(LLRender::BF_ONE_MINUS_DEST_ALPHA, LLRender::BF_DEST_ALPHA);
672 gGL.color4fv( mBackgroundColor.mV ); 671 gGL.color4fv( mBackgroundColor.mV );
673 gl_rect_2d(0, height, width, 0); 672 gl_rect_2d(0, height, width, 0);
674 } 673 }
675 674
676 glAlphaFunc(GL_GEQUAL, 0.01f); 675 gGL.setAlphaRejectSettings(LLRender::CF_DEFAULT);
677 gGL.blendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); 676 gGL.setSceneBlendType(LLRender::BT_ALPHA);
678 677
679 // Infohubs 678 // Infohubs
680 if (gSavedSettings.getBOOL("MapShowInfohubs")) //(gMapScale >= sThresholdB) 679 if (gSavedSettings.getBOOL("MapShowInfohubs")) //(gMapScale >= sThresholdB)
@@ -705,11 +704,6 @@ void LLWorldMapView::draw()
705 drawGenericItems(LLWorldMap::getInstance()->mClassifieds, sClassifiedsImage); 704 drawGenericItems(LLWorldMap::getInstance()->mClassifieds, sClassifiedsImage);
706 } 705 }
707 706
708 if (gSavedSettings.getBOOL("MapShowPopular"))
709 {
710 drawGenericItems(LLWorldMap::getInstance()->mPopular, sPopularImage);
711 }
712
713 if (gSavedSettings.getBOOL("MapShowEvents")) 707 if (gSavedSettings.getBOOL("MapShowEvents"))
714 { 708 {
715 drawEvents(); 709 drawEvents();
@@ -1533,10 +1527,6 @@ void LLWorldMapView::handleClick(S32 x, S32 y, MASK mask,
1533 { 1527 {
1534 (*it).mSelected = FALSE; 1528 (*it).mSelected = FALSE;
1535 } 1529 }
1536 for (it = LLWorldMap::getInstance()->mPopular.begin(); it != LLWorldMap::getInstance()->mPopular.end(); ++it)
1537 {
1538 (*it).mSelected = FALSE;
1539 }
1540 for (it = LLWorldMap::getInstance()->mLandForSale.begin(); it != LLWorldMap::getInstance()->mLandForSale.end(); ++it) 1530 for (it = LLWorldMap::getInstance()->mLandForSale.begin(); it != LLWorldMap::getInstance()->mLandForSale.end(); ++it)
1541 { 1531 {
1542 (*it).mSelected = FALSE; 1532 (*it).mSelected = FALSE;
@@ -1578,21 +1568,6 @@ void LLWorldMapView::handleClick(S32 x, S32 y, MASK mask,
1578 } 1568 }
1579 } 1569 }
1580 1570
1581 if (gSavedSettings.getBOOL("MapShowPopular"))
1582 {
1583 for (it = LLWorldMap::getInstance()->mPopular.begin(); it != LLWorldMap::getInstance()->mPopular.end(); ++it)
1584 {
1585 LLItemInfo& popular = *it;
1586
1587 if (checkItemHit(x, y, popular, id, true))
1588 {
1589 *hit_type = MAP_ITEM_POPULAR;
1590 mItemPicked = TRUE;
1591 return;
1592 }
1593 }
1594 }
1595
1596 if (gSavedSettings.getBOOL("MapShowLandForSale")) 1571 if (gSavedSettings.getBOOL("MapShowLandForSale"))
1597 { 1572 {
1598 for (it = LLWorldMap::getInstance()->mLandForSale.begin(); it != LLWorldMap::getInstance()->mLandForSale.end(); ++it) 1573 for (it = LLWorldMap::getInstance()->mLandForSale.begin(); it != LLWorldMap::getInstance()->mLandForSale.end(); ++it)
@@ -1796,12 +1771,6 @@ BOOL LLWorldMapView::handleDoubleClick( S32 x, S32 y, MASK mask )
1796 LLFloaterDirectory::showEvents(event_id); 1771 LLFloaterDirectory::showEvents(event_id);
1797 break; 1772 break;
1798 } 1773 }
1799 case MAP_ITEM_POPULAR:
1800 {
1801 gFloaterWorldMap->close();
1802 LLFloaterDirectory::showPopular(id);
1803 break;
1804 }
1805 case MAP_ITEM_LAND_FOR_SALE: 1774 case MAP_ITEM_LAND_FOR_SALE:
1806 { 1775 {
1807 gFloaterWorldMap->close(); 1776 gFloaterWorldMap->close();
diff --git a/linden/indra/newview/llworldmapview.h b/linden/indra/newview/llworldmapview.h
index 18626b5..079cd47 100644
--- a/linden/indra/newview/llworldmapview.h
+++ b/linden/indra/newview/llworldmapview.h
@@ -149,7 +149,6 @@ public:
149 static LLUIImagePtr sTrackCircleImage; 149 static LLUIImagePtr sTrackCircleImage;
150 static LLUIImagePtr sTrackArrowImage; 150 static LLUIImagePtr sTrackArrowImage;
151 static LLUIImagePtr sClassifiedsImage; 151 static LLUIImagePtr sClassifiedsImage;
152 static LLUIImagePtr sPopularImage;
153 static LLUIImagePtr sForSaleImage; 152 static LLUIImagePtr sForSaleImage;
154 153
155 static F32 sThresholdA; 154 static F32 sThresholdA;
diff --git a/linden/indra/newview/llxmlrpctransaction.cpp b/linden/indra/newview/llxmlrpctransaction.cpp
index 7179104..9b49eb9 100644
--- a/linden/indra/newview/llxmlrpctransaction.cpp
+++ b/linden/indra/newview/llxmlrpctransaction.cpp
@@ -569,10 +569,10 @@ F64 LLXMLRPCTransaction::transferRate()
569 569
570 double rate_bits_per_sec = impl.mTransferInfo.mSpeedDownload * 8.0; 570 double rate_bits_per_sec = impl.mTransferInfo.mSpeedDownload * 8.0;
571 571
572 llinfos << "Buffer size: " << impl.mResponseText.size() << " B" << llendl; 572 LL_INFOS("AppInit") << "Buffer size: " << impl.mResponseText.size() << " B" << LL_ENDL;
573 llinfos << "Transfer size: " << impl.mTransferInfo.mSizeDownload << " B" << llendl; 573 LL_DEBUGS("AppInit") << "Transfer size: " << impl.mTransferInfo.mSizeDownload << " B" << LL_ENDL;
574 llinfos << "Transfer time: " << impl.mTransferInfo.mTotalTime << " s" << llendl; 574 LL_DEBUGS("AppInit") << "Transfer time: " << impl.mTransferInfo.mTotalTime << " s" << LL_ENDL;
575 llinfos << "Transfer rate: " << rate_bits_per_sec / 1000.0 << " Kb/s" << llendl; 575 LL_INFOS("AppInit") << "Transfer rate: " << rate_bits_per_sec / 1000.0 << " Kb/s" << LL_ENDL;
576 576
577 return rate_bits_per_sec; 577 return rate_bits_per_sec;
578} 578}
diff --git a/linden/indra/newview/macview.xcodeproj/project.pbxproj b/linden/indra/newview/macview.xcodeproj/project.pbxproj
index 33a709c..c817b27 100644
--- a/linden/indra/newview/macview.xcodeproj/project.pbxproj
+++ b/linden/indra/newview/macview.xcodeproj/project.pbxproj
@@ -23,6 +23,7 @@
23/* Begin PBXBuildFile section */ 23/* Begin PBXBuildFile section */
24 0633E5D209E341F500712406 /* llfile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0633E5D009E341F500712406 /* llfile.cpp */; }; 24 0633E5D209E341F500712406 /* llfile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0633E5D009E341F500712406 /* llfile.cpp */; };
25 0633E5D509E3421500712406 /* llstreamtools.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0633E5D309E3421500712406 /* llstreamtools.cpp */; }; 25 0633E5D509E3421500712406 /* llstreamtools.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0633E5D309E3421500712406 /* llstreamtools.cpp */; };
26 07167BBC0DCA8059003FE31D /* llrender.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 07167BBA0DCA8059003FE31D /* llrender.cpp */; };
26 1A02016F0B7A85DE00D5C589 /* llbase64.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1A02016D0B7A85DE00D5C589 /* llbase64.cpp */; }; 27 1A02016F0B7A85DE00D5C589 /* llbase64.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1A02016D0B7A85DE00D5C589 /* llbase64.cpp */; };
27 1A0201850B7A861200D5C589 /* llblowfishcipher.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1A02017E0B7A861200D5C589 /* llblowfishcipher.cpp */; }; 28 1A0201850B7A861200D5C589 /* llblowfishcipher.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1A02017E0B7A861200D5C589 /* llblowfishcipher.cpp */; };
28 1A0201860B7A861200D5C589 /* llnullcipher.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1A0201810B7A861200D5C589 /* llnullcipher.cpp */; }; 29 1A0201860B7A861200D5C589 /* llnullcipher.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1A0201810B7A861200D5C589 /* llnullcipher.cpp */; };
@@ -60,6 +61,9 @@
60 1AD394130CAB001B004BA76A /* llcommandhandler.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1AD394120CAB001B004BA76A /* llcommandhandler.cpp */; }; 61 1AD394130CAB001B004BA76A /* llcommandhandler.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1AD394120CAB001B004BA76A /* llcommandhandler.cpp */; };
61 1AD61F6B0AC09B1900507FB9 /* llimview.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1AD61F6A0AC09B1900507FB9 /* llimview.cpp */; }; 62 1AD61F6B0AC09B1900507FB9 /* llimview.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1AD61F6A0AC09B1900507FB9 /* llimview.cpp */; };
62 1ADE58940D7CCF6000183F7F /* llfloaterhud.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1ADE58920D7CCF6000183F7F /* llfloaterhud.cpp */; }; 63 1ADE58940D7CCF6000183F7F /* llfloaterhud.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1ADE58920D7CCF6000183F7F /* llfloaterhud.cpp */; };
64 1AE0820F0DA708E900575141 /* llanimstatelabels.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1AE082090DA708E900575141 /* llanimstatelabels.cpp */; };
65 1AE082100DA708E900575141 /* llstylemap.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1AE0820B0DA708E900575141 /* llstylemap.cpp */; };
66 1AE082110DA708E900575141 /* lltrans.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1AE0820D0DA708E900575141 /* lltrans.cpp */; };
63 1AE5D7120844FBD300278605 /* llwebbrowserctrl.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1AE5D7100844FBD300278605 /* llwebbrowserctrl.cpp */; }; 67 1AE5D7120844FBD300278605 /* llwebbrowserctrl.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1AE5D7100844FBD300278605 /* llwebbrowserctrl.cpp */; };
64 1AEF0A580B2DFE67003F107C /* llctrlselectioninterface.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1AEF0A560B2DFE67003F107C /* llctrlselectioninterface.cpp */; }; 68 1AEF0A580B2DFE67003F107C /* llctrlselectioninterface.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1AEF0A560B2DFE67003F107C /* llctrlselectioninterface.cpp */; };
65 1AEF0A5B0B2DFE72003F107C /* llrootview.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1AEF0A5A0B2DFE72003F107C /* llrootview.cpp */; }; 69 1AEF0A5B0B2DFE72003F107C /* llrootview.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1AEF0A5A0B2DFE72003F107C /* llrootview.cpp */; };
@@ -557,7 +561,6 @@
557 A241CB7D07B3DE0D001A39E3 /* llviewerprecompiledheaders.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A241CB7B07B3DE0D001A39E3 /* llviewerprecompiledheaders.cpp */; }; 561 A241CB7D07B3DE0D001A39E3 /* llviewerprecompiledheaders.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A241CB7B07B3DE0D001A39E3 /* llviewerprecompiledheaders.cpp */; };
558 A241CB9207B3E383001A39E3 /* llmessagethrottle.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A241CB8E07B3E383001A39E3 /* llmessagethrottle.cpp */; }; 562 A241CB9207B3E383001A39E3 /* llmessagethrottle.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A241CB8E07B3E383001A39E3 /* llmessagethrottle.cpp */; };
559 A241CB9507B3E3A7001A39E3 /* llperlin.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A241CB9407B3E3A7001A39E3 /* llperlin.cpp */; }; 563 A241CB9507B3E3A7001A39E3 /* llperlin.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A241CB9407B3E3A7001A39E3 /* llperlin.cpp */; };
560 A243B29A0C6769AC004DFF19 /* llglimmediate.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A243B2980C6769AC004DFF19 /* llglimmediate.cpp */; };
561 A26560520C9F53CC004042A0 /* llfloaterhardwaresettings.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A26560500C9F53CC004042A0 /* llfloaterhardwaresettings.cpp */; }; 564 A26560520C9F53CC004042A0 /* llfloaterhardwaresettings.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A26560500C9F53CC004042A0 /* llfloaterhardwaresettings.cpp */; };
562 A2A8C5480C649EE20001FEB2 /* llmultislider.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A2A8C5440C649EE20001FEB2 /* llmultislider.cpp */; }; 565 A2A8C5480C649EE20001FEB2 /* llmultislider.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A2A8C5440C649EE20001FEB2 /* llmultislider.cpp */; };
563 A2A8C5490C649EE20001FEB2 /* llmultisliderctrl.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A2A8C5460C649EE20001FEB2 /* llmultisliderctrl.cpp */; }; 566 A2A8C5490C649EE20001FEB2 /* llmultisliderctrl.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A2A8C5460C649EE20001FEB2 /* llmultisliderctrl.cpp */; };
@@ -836,6 +839,8 @@
836 FDE8766409BEA3C700AF6316 /* libvorbisenc.a in Frameworks */ = {isa = PBXBuildFile; fileRef = FDE8765609BEA39600AF6316 /* libvorbisenc.a */; }; 839 FDE8766409BEA3C700AF6316 /* libvorbisenc.a in Frameworks */ = {isa = PBXBuildFile; fileRef = FDE8765609BEA39600AF6316 /* libvorbisenc.a */; };
837 FDE8766509BEA3C700AF6316 /* libvorbisfile.a in Frameworks */ = {isa = PBXBuildFile; fileRef = FDE8765709BEA39600AF6316 /* libvorbisfile.a */; }; 840 FDE8766509BEA3C700AF6316 /* libvorbisfile.a in Frameworks */ = {isa = PBXBuildFile; fileRef = FDE8765709BEA39600AF6316 /* libvorbisfile.a */; };
838 FDE8766609BEA3C800AF6316 /* libxmlrpc.a in Frameworks */ = {isa = PBXBuildFile; fileRef = FDE8765809BEA39700AF6316 /* libxmlrpc.a */; }; 841 FDE8766609BEA3C800AF6316 /* libxmlrpc.a in Frameworks */ = {isa = PBXBuildFile; fileRef = FDE8765809BEA39700AF6316 /* libxmlrpc.a */; };
842 FE065EA40D8B0EE60089E9F1 /* llwatchdog.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FE065EA10D8B0EE60089E9F1 /* llwatchdog.cpp */; };
843 FE065EA50D8B0EE60089E9F1 /* llwindebug.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FE065EA30D8B0EE60089E9F1 /* llwindebug.cpp */; };
839 FE0AEE2D0D2D96D20097256A /* libllmozlib2.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = FE0AEE2C0D2D96D20097256A /* libllmozlib2.dylib */; }; 844 FE0AEE2D0D2D96D20097256A /* libllmozlib2.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = FE0AEE2C0D2D96D20097256A /* libllmozlib2.dylib */; };
840 FE0AEE4D0D2D9C6E0097256A /* llparcelselection.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FE0AEE4A0D2D9C6E0097256A /* llparcelselection.cpp */; }; 845 FE0AEE4D0D2D9C6E0097256A /* llparcelselection.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FE0AEE4A0D2D9C6E0097256A /* llparcelselection.cpp */; };
841 FE42C3140D231D1A00D9F143 /* llcommandlineparser.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FE42C3120D231D1A00D9F143 /* llcommandlineparser.cpp */; }; 846 FE42C3140D231D1A00D9F143 /* llcommandlineparser.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FE42C3120D231D1A00D9F143 /* llcommandlineparser.cpp */; };
@@ -988,6 +993,8 @@
988 0633E5D109E341F500712406 /* llfile.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llfile.h; sourceTree = "<group>"; }; 993 0633E5D109E341F500712406 /* llfile.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llfile.h; sourceTree = "<group>"; };
989 0633E5D309E3421500712406 /* llstreamtools.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llstreamtools.cpp; sourceTree = "<group>"; }; 994 0633E5D309E3421500712406 /* llstreamtools.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llstreamtools.cpp; sourceTree = "<group>"; };
990 0633E5D409E3421500712406 /* llstreamtools.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llstreamtools.h; sourceTree = "<group>"; }; 995 0633E5D409E3421500712406 /* llstreamtools.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llstreamtools.h; sourceTree = "<group>"; };
996 07167BBA0DCA8059003FE31D /* llrender.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = llrender.cpp; sourceTree = "<group>"; };
997 07167BBB0DCA8059003FE31D /* llrender.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = llrender.h; sourceTree = "<group>"; };
991 0867D6ABFE840B52C02AAC07 /* English */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.strings; name = English; path = English.lproj/InfoPlist.strings; sourceTree = "<group>"; }; 998 0867D6ABFE840B52C02AAC07 /* English */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.strings; name = English; path = English.lproj/InfoPlist.strings; sourceTree = "<group>"; };
992 1A02016D0B7A85DE00D5C589 /* llbase64.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llbase64.cpp; sourceTree = "<group>"; }; 999 1A02016D0B7A85DE00D5C589 /* llbase64.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llbase64.cpp; sourceTree = "<group>"; };
993 1A02016E0B7A85DE00D5C589 /* llbase64.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llbase64.h; sourceTree = "<group>"; }; 1000 1A02016E0B7A85DE00D5C589 /* llbase64.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llbase64.h; sourceTree = "<group>"; };
@@ -1075,6 +1082,12 @@
1075 1AD61F6C0AC09B2600507FB9 /* llimview.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llimview.h; sourceTree = "<group>"; }; 1082 1AD61F6C0AC09B2600507FB9 /* llimview.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llimview.h; sourceTree = "<group>"; };
1076 1ADE58920D7CCF6000183F7F /* llfloaterhud.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = llfloaterhud.cpp; sourceTree = "<group>"; }; 1083 1ADE58920D7CCF6000183F7F /* llfloaterhud.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = llfloaterhud.cpp; sourceTree = "<group>"; };
1077 1ADE58930D7CCF6000183F7F /* llfloaterhud.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = llfloaterhud.h; sourceTree = "<group>"; }; 1084 1ADE58930D7CCF6000183F7F /* llfloaterhud.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = llfloaterhud.h; sourceTree = "<group>"; };
1085 1AE082090DA708E900575141 /* llanimstatelabels.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = llanimstatelabels.cpp; sourceTree = "<group>"; };
1086 1AE0820A0DA708E900575141 /* llanimstatelabels.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = llanimstatelabels.h; sourceTree = "<group>"; };
1087 1AE0820B0DA708E900575141 /* llstylemap.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = llstylemap.cpp; sourceTree = "<group>"; };
1088 1AE0820C0DA708E900575141 /* llstylemap.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = llstylemap.h; sourceTree = "<group>"; };
1089 1AE0820D0DA708E900575141 /* lltrans.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = lltrans.cpp; sourceTree = "<group>"; };
1090 1AE0820E0DA708E900575141 /* lltrans.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lltrans.h; sourceTree = "<group>"; };
1078 1AE5D70F0844FBD200278605 /* llwebbrowserctrl.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llwebbrowserctrl.h; sourceTree = "<group>"; }; 1091 1AE5D70F0844FBD200278605 /* llwebbrowserctrl.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llwebbrowserctrl.h; sourceTree = "<group>"; };
1079 1AE5D7100844FBD300278605 /* llwebbrowserctrl.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llwebbrowserctrl.cpp; sourceTree = "<group>"; }; 1092 1AE5D7100844FBD300278605 /* llwebbrowserctrl.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llwebbrowserctrl.cpp; sourceTree = "<group>"; };
1080 1AEF0A560B2DFE67003F107C /* llctrlselectioninterface.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llctrlselectioninterface.cpp; sourceTree = "<group>"; }; 1093 1AEF0A560B2DFE67003F107C /* llctrlselectioninterface.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llctrlselectioninterface.cpp; sourceTree = "<group>"; };
@@ -2113,8 +2126,6 @@
2113 A241CB8E07B3E383001A39E3 /* llmessagethrottle.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llmessagethrottle.cpp; sourceTree = "<group>"; }; 2126 A241CB8E07B3E383001A39E3 /* llmessagethrottle.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llmessagethrottle.cpp; sourceTree = "<group>"; };
2114 A241CB8F07B3E383001A39E3 /* llmessagethrottle.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llmessagethrottle.h; sourceTree = "<group>"; }; 2127 A241CB8F07B3E383001A39E3 /* llmessagethrottle.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llmessagethrottle.h; sourceTree = "<group>"; };
2115 A241CB9407B3E3A7001A39E3 /* llperlin.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llperlin.cpp; sourceTree = "<group>"; }; 2128 A241CB9407B3E3A7001A39E3 /* llperlin.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llperlin.cpp; sourceTree = "<group>"; };
2116 A243B2980C6769AC004DFF19 /* llglimmediate.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llglimmediate.cpp; sourceTree = "<group>"; };
2117 A243B2990C6769AC004DFF19 /* llglimmediate.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llglimmediate.h; sourceTree = "<group>"; };
2118 A26560500C9F53CC004042A0 /* llfloaterhardwaresettings.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llfloaterhardwaresettings.cpp; sourceTree = "<group>"; }; 2129 A26560500C9F53CC004042A0 /* llfloaterhardwaresettings.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llfloaterhardwaresettings.cpp; sourceTree = "<group>"; };
2119 A26560510C9F53CC004042A0 /* llfloaterhardwaresettings.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llfloaterhardwaresettings.h; sourceTree = "<group>"; }; 2130 A26560510C9F53CC004042A0 /* llfloaterhardwaresettings.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llfloaterhardwaresettings.h; sourceTree = "<group>"; };
2120 A29852A10BC6BC630005FA09 /* llhtmlhelp.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llhtmlhelp.h; sourceTree = "<group>"; }; 2131 A29852A10BC6BC630005FA09 /* llhtmlhelp.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llhtmlhelp.h; sourceTree = "<group>"; };
@@ -2396,6 +2407,9 @@
2396 FDE8765609BEA39600AF6316 /* libvorbisenc.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libvorbisenc.a; sourceTree = BUILT_PRODUCTS_DIR; }; 2407 FDE8765609BEA39600AF6316 /* libvorbisenc.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libvorbisenc.a; sourceTree = BUILT_PRODUCTS_DIR; };
2397 FDE8765709BEA39600AF6316 /* libvorbisfile.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libvorbisfile.a; sourceTree = BUILT_PRODUCTS_DIR; }; 2408 FDE8765709BEA39600AF6316 /* libvorbisfile.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libvorbisfile.a; sourceTree = BUILT_PRODUCTS_DIR; };
2398 FDE8765809BEA39700AF6316 /* libxmlrpc.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libxmlrpc.a; sourceTree = BUILT_PRODUCTS_DIR; }; 2409 FDE8765809BEA39700AF6316 /* libxmlrpc.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libxmlrpc.a; sourceTree = BUILT_PRODUCTS_DIR; };
2410 FE065EA10D8B0EE60089E9F1 /* llwatchdog.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = llwatchdog.cpp; sourceTree = "<group>"; };
2411 FE065EA30D8B0EE60089E9F1 /* llwindebug.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = llwindebug.cpp; sourceTree = "<group>"; };
2412 FE065EA60D8B0F170089E9F1 /* llwatchdog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = llwatchdog.h; sourceTree = "<group>"; };
2399 FE0AEE2C0D2D96D20097256A /* libllmozlib2.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libllmozlib2.dylib; path = "../../libraries/universal-darwin/lib_debug/libllmozlib2.dylib"; sourceTree = SOURCE_ROOT; }; 2413 FE0AEE2C0D2D96D20097256A /* libllmozlib2.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libllmozlib2.dylib; path = "../../libraries/universal-darwin/lib_debug/libllmozlib2.dylib"; sourceTree = SOURCE_ROOT; };
2400 FE0AEE480D2D9C6E0097256A /* lllcd.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = lllcd.cpp; sourceTree = SOURCE_ROOT; }; 2414 FE0AEE480D2D9C6E0097256A /* lllcd.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = lllcd.cpp; sourceTree = SOURCE_ROOT; };
2401 FE0AEE490D2D9C6E0097256A /* lllcd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lllcd.h; sourceTree = SOURCE_ROOT; }; 2415 FE0AEE490D2D9C6E0097256A /* lllcd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lllcd.h; sourceTree = SOURCE_ROOT; };
@@ -2654,10 +2668,19 @@
2654 children = ( 2668 children = (
2655 AA38F8F00D8A3687003B39F9 /* llfloaterjoystick.cpp */, 2669 AA38F8F00D8A3687003B39F9 /* llfloaterjoystick.cpp */,
2656 AA38F8F10D8A3687003B39F9 /* llfloaterjoystick.h */, 2670 AA38F8F10D8A3687003B39F9 /* llfloaterjoystick.h */,
2671 1AE082090DA708E900575141 /* llanimstatelabels.cpp */,
2672 1AE0820A0DA708E900575141 /* llanimstatelabels.h */,
2673 1AE0820B0DA708E900575141 /* llstylemap.cpp */,
2674 1AE0820C0DA708E900575141 /* llstylemap.h */,
2675 1AE0820D0DA708E900575141 /* lltrans.cpp */,
2676 1AE0820E0DA708E900575141 /* lltrans.h */,
2657 1ADE58920D7CCF6000183F7F /* llfloaterhud.cpp */, 2677 1ADE58920D7CCF6000183F7F /* llfloaterhud.cpp */,
2658 1ADE58930D7CCF6000183F7F /* llfloaterhud.h */, 2678 1ADE58930D7CCF6000183F7F /* llfloaterhud.h */,
2659 D1BB623B0D91BBEB00001516 /* llfloatervoicedevicesettings.cpp */, 2679 D1BB623B0D91BBEB00001516 /* llfloatervoicedevicesettings.cpp */,
2660 D1BB623C0D91BBEC00001516 /* llfloatervoicedevicesettings.h */, 2680 D1BB623C0D91BBEC00001516 /* llfloatervoicedevicesettings.h */,
2681 FE065EA60D8B0F170089E9F1 /* llwatchdog.h */,
2682 FE065EA10D8B0EE60089E9F1 /* llwatchdog.cpp */,
2683 FE065EA30D8B0EE60089E9F1 /* llwindebug.cpp */,
2661 FE0AEE480D2D9C6E0097256A /* lllcd.cpp */, 2684 FE0AEE480D2D9C6E0097256A /* lllcd.cpp */,
2662 FE0AEE490D2D9C6E0097256A /* lllcd.h */, 2685 FE0AEE490D2D9C6E0097256A /* lllcd.h */,
2663 FE0AEE4A0D2D9C6E0097256A /* llparcelselection.cpp */, 2686 FE0AEE4A0D2D9C6E0097256A /* llparcelselection.cpp */,
@@ -4235,8 +4258,8 @@
4235 D628314D0B4F3FA100F8830F /* llrender */ = { 4258 D628314D0B4F3FA100F8830F /* llrender */ = {
4236 isa = PBXGroup; 4259 isa = PBXGroup;
4237 children = ( 4260 children = (
4238 A243B2980C6769AC004DFF19 /* llglimmediate.cpp */, 4261 07167BBA0DCA8059003FE31D /* llrender.cpp */,
4239 A243B2990C6769AC004DFF19 /* llglimmediate.h */, 4262 07167BBB0DCA8059003FE31D /* llrender.h */,
4240 A30273550B3A13D800704420 /* llvertexbuffer.cpp */, 4263 A30273550B3A13D800704420 /* llvertexbuffer.cpp */,
4241 A30273560B3A13D800704420 /* llvertexbuffer.h */, 4264 A30273560B3A13D800704420 /* llvertexbuffer.h */,
4242 D628315B0B4F3FA100F8830F /* llfont.cpp */, 4265 D628315B0B4F3FA100F8830F /* llfont.cpp */,
@@ -5018,7 +5041,7 @@
5018 A2A8C5680C649F490001FEB2 /* llwldaycycle.cpp in Sources */, 5041 A2A8C5680C649F490001FEB2 /* llwldaycycle.cpp in Sources */,
5019 A2A8C5690C649F490001FEB2 /* llwlparammanager.cpp in Sources */, 5042 A2A8C5690C649F490001FEB2 /* llwlparammanager.cpp in Sources */,
5020 A2A8C56A0C649F490001FEB2 /* llwlparamset.cpp in Sources */, 5043 A2A8C56A0C649F490001FEB2 /* llwlparamset.cpp in Sources */,
5021 A243B29A0C6769AC004DFF19 /* llglimmediate.cpp in Sources */, 5044 07167BBC0DCA8059003FE31D /* llrender.cpp in Sources */,
5022 1CBB67D80C7CCCB2007DAAAE /* llfloaterwater.cpp in Sources */, 5045 1CBB67D80C7CCCB2007DAAAE /* llfloaterwater.cpp in Sources */,
5023 1CBB67D90C7CCCB2007DAAAE /* llwaterparammanager.cpp in Sources */, 5046 1CBB67D90C7CCCB2007DAAAE /* llwaterparammanager.cpp in Sources */,
5024 1CBB67DA0C7CCCB2007DAAAE /* llwaterparamset.cpp in Sources */, 5047 1CBB67DA0C7CCCB2007DAAAE /* llwaterparamset.cpp in Sources */,
@@ -5027,10 +5050,15 @@
5027 A26560520C9F53CC004042A0 /* llfloaterhardwaresettings.cpp in Sources */, 5050 A26560520C9F53CC004042A0 /* llfloaterhardwaresettings.cpp in Sources */,
5028 D1CA83CE0D62634400C61743 /* llfloaterstats.cpp in Sources */, 5051 D1CA83CE0D62634400C61743 /* llfloaterstats.cpp in Sources */,
5029 1ADE58940D7CCF6000183F7F /* llfloaterhud.cpp in Sources */, 5052 1ADE58940D7CCF6000183F7F /* llfloaterhud.cpp in Sources */,
5053 FE065EA40D8B0EE60089E9F1 /* llwatchdog.cpp in Sources */,
5054 FE065EA50D8B0EE60089E9F1 /* llwindebug.cpp in Sources */,
5030 CB0873B60D62226B009600F8 /* lldelayedgestureerror.cpp in Sources */, 5055 CB0873B60D62226B009600F8 /* lldelayedgestureerror.cpp in Sources */,
5031 1A531BFC0D81056E00DEB305 /* llfloatercamera.cpp in Sources */, 5056 1A531BFC0D81056E00DEB305 /* llfloatercamera.cpp in Sources */,
5032 D1BB623D0D91BBEC00001516 /* llfloatervoicedevicesettings.cpp in Sources */, 5057 D1BB623D0D91BBEC00001516 /* llfloatervoicedevicesettings.cpp in Sources */,
5033 AA38F8F20D8A3687003B39F9 /* llfloaterjoystick.cpp in Sources */, 5058 AA38F8F20D8A3687003B39F9 /* llfloaterjoystick.cpp in Sources */,
5059 1AE0820F0DA708E900575141 /* llanimstatelabels.cpp in Sources */,
5060 1AE082100DA708E900575141 /* llstylemap.cpp in Sources */,
5061 1AE082110DA708E900575141 /* lltrans.cpp in Sources */,
5034 ); 5062 );
5035 runOnlyForDeploymentPostprocessing = 0; 5063 runOnlyForDeploymentPostprocessing = 0;
5036 }; 5064 };
diff --git a/linden/indra/newview/newview.vcproj b/linden/indra/newview/newview.vcproj
index 3fe72e6..a378434 100644
--- a/linden/indra/newview/newview.vcproj
+++ b/linden/indra/newview/newview.vcproj
@@ -295,6 +295,9 @@
295 RelativePath=".\llagentpilot.cpp"> 295 RelativePath=".\llagentpilot.cpp">
296 </File> 296 </File>
297 <File 297 <File
298 RelativePath=".\llanimstatelabels.cpp">
299 </File>
300 <File
298 RelativePath=".\llappviewer.cpp"> 301 RelativePath=".\llappviewer.cpp">
299 </File> 302 </File>
300 <File 303 <File
@@ -1057,6 +1060,9 @@
1057 RelativePath=".\llstatview.cpp"> 1060 RelativePath=".\llstatview.cpp">
1058 </File> 1061 </File>
1059 <File 1062 <File
1063 RelativePath=".\llstylemap.cpp">
1064 </File>
1065 <File
1060 RelativePath=".\llsurface.cpp"> 1066 RelativePath=".\llsurface.cpp">
1061 </File> 1067 </File>
1062 <File 1068 <File
@@ -1141,6 +1147,9 @@
1141 RelativePath=".\lltracker.cpp"> 1147 RelativePath=".\lltracker.cpp">
1142 </File> 1148 </File>
1143 <File 1149 <File
1150 RelativePath=".\lltrans.cpp">
1151 </File>
1152 <File
1144 RelativePath=".\lluploaddialog.cpp"> 1153 RelativePath=".\lluploaddialog.cpp">
1145 </File> 1154 </File>
1146 <File 1155 <File
@@ -1404,6 +1413,9 @@
1404 RelativePath=".\llvowlsky.cpp"> 1413 RelativePath=".\llvowlsky.cpp">
1405 </File> 1414 </File>
1406 <File 1415 <File
1416 RelativePath=".\llwatchdog.cpp">
1417 </File>
1418 <File
1407 RelativePath=".\llwaterparammanager.cpp"> 1419 RelativePath=".\llwaterparammanager.cpp">
1408 </File> 1420 </File>
1409 <File 1421 <File
@@ -1478,6 +1490,9 @@
1478 RelativePath=".\llagentpilot.h"> 1490 RelativePath=".\llagentpilot.h">
1479 </File> 1491 </File>
1480 <File 1492 <File
1493 RelativePath=".\llanimstatelabels.h">
1494 </File>
1495 <File
1481 RelativePath=".\llappearance.h"> 1496 RelativePath=".\llappearance.h">
1482 </File> 1497 </File>
1483 <File 1498 <File
@@ -1646,6 +1661,9 @@
1646 RelativePath=".\llfilist.h"> 1661 RelativePath=".\llfilist.h">
1647 </File> 1662 </File>
1648 <File 1663 <File
1664 RelativePath="..\llcommon\llfindlocale.h">
1665 </File>
1666 <File
1649 RelativePath=".\llfirstuse.h"> 1667 RelativePath=".\llfirstuse.h">
1650 </File> 1668 </File>
1651 <File 1669 <File
@@ -2252,6 +2270,9 @@
2252 RelativePath=".\llstatview.h"> 2270 RelativePath=".\llstatview.h">
2253 </File> 2271 </File>
2254 <File 2272 <File
2273 RelativePath=".\llstylemap.h">
2274 </File>
2275 <File
2255 RelativePath=".\llsurface.h"> 2276 RelativePath=".\llsurface.h">
2256 </File> 2277 </File>
2257 <File 2278 <File
@@ -2342,6 +2363,9 @@
2342 RelativePath=".\lltracker.h"> 2363 RelativePath=".\lltracker.h">
2343 </File> 2364 </File>
2344 <File 2365 <File
2366 RelativePath=".\lltrans.h">
2367 </File>
2368 <File
2345 RelativePath=".\lluploaddialog.h"> 2369 RelativePath=".\lluploaddialog.h">
2346 </File> 2370 </File>
2347 <File 2371 <File
@@ -2540,6 +2564,9 @@
2540 RelativePath=".\llvowlsky.h"> 2564 RelativePath=".\llvowlsky.h">
2541 </File> 2565 </File>
2542 <File 2566 <File
2567 RelativePath=".\llwatchdog.h">
2568 </File>
2569 <File
2543 RelativePath=".\llwearable.h"> 2570 RelativePath=".\llwearable.h">
2544 </File> 2571 </File>
2545 <File 2572 <File
diff --git a/linden/indra/newview/newview_vc8.vcproj b/linden/indra/newview/newview_vc8.vcproj
index 24a3459..9d9a9d2 100644
--- a/linden/indra/newview/newview_vc8.vcproj
+++ b/linden/indra/newview/newview_vc8.vcproj
@@ -69,7 +69,7 @@
69 /> 69 />
70 <Tool 70 <Tool
71 Name="VCLinkerTool" 71 Name="VCLinkerTool"
72 AdditionalDependencies="advapi32.lib apr-1.lib aprutil-1.lib areslib.lib comdlg32.lib dinput8.lib dsound.lib dxerr8.lib dxguid.lib fmodvc.lib freetype.lib gdi32.lib glu32.lib jpeglib_6b.lib kernel32.lib libboost_regex-vc80-mt-sgd-1_34_1.lib libboost_signals-vc80-mt-sgd-1_34_1.lib libboost_program_options-vc80-mt-sgd-1_34_1.lib libcurld.lib libeay32.lib libexpatMT.lib OpenJPEGd.lib llmozlib2d-vc80.lib mswsock.lib netapi32.lib odbc32.lib odbccp32.lib ogg_static_mt.lib ole32.lib oleaut32.lib opengl32.lib png12.lib psapi.lib qtmlclient.lib shell32.lib ssleay32.lib user32.lib Vfw32.lib vorbis_static_mt.lib vorbisenc_static_mt.lib vorbisfile_static_mt.lib winmm.lib winspool.lib ws2_32.lib xmlrpcepi.lib zlib.lib dnsapi.lib EZ_LCD_Wrapper_vc8.lib lgLcd.lib libndofdev.lib" 72 AdditionalDependencies="advapi32.lib apr-1.lib aprutil-1.lib areslib.lib comdlg32.lib dinput8.lib dxguid.lib fmodvc.lib freetype.lib gdi32.lib glu32.lib jpeglib_6b.lib kernel32.lib libboost_regex-vc80-mt-sgd-1_34_1.lib libboost_signals-vc80-mt-sgd-1_34_1.lib libboost_program_options-vc80-mt-sgd-1_34_1.lib libcurld.lib libeay32.lib libexpatMT.lib OpenJPEGd.lib llmozlib2d-vc80.lib mswsock.lib netapi32.lib odbc32.lib odbccp32.lib ogg_static_mt.lib ole32.lib oleaut32.lib opengl32.lib png12.lib psapi.lib qtmlclient.lib shell32.lib ssleay32.lib user32.lib Vfw32.lib vorbis_static_mt.lib vorbisenc_static_mt.lib vorbisfile_static_mt.lib winmm.lib winspool.lib ws2_32.lib xmlrpcepi.lib zlib.lib dnsapi.lib EZ_LCD_Wrapper_vc8.lib lgLcd.lib libndofdev.lib"
73 OutputFile="$(ConfigurationName)/debugview.exe" 73 OutputFile="$(ConfigurationName)/debugview.exe"
74 LinkIncremental="2" 74 LinkIncremental="2"
75 AdditionalLibraryDirectories="&quot;../lib_$(ConfigurationName)/i686-win32&quot;;&quot;../../libraries/i686-win32/lib_debug&quot;" 75 AdditionalLibraryDirectories="&quot;../lib_$(ConfigurationName)/i686-win32&quot;;&quot;../../libraries/i686-win32/lib_debug&quot;"
@@ -166,7 +166,7 @@
166 /> 166 />
167 <Tool 167 <Tool
168 Name="VCLinkerTool" 168 Name="VCLinkerTool"
169 AdditionalDependencies="advapi32.lib apr-1.lib aprutil-1.lib areslib.lib comdlg32.lib dinput8.lib dsound.lib dxerr8.lib dxguid.lib fmodvc.lib freetype.lib gdi32.lib glu32.lib jpeglib_6b.lib kernel32.lib libboost_regex-vc80-mt-s-1_34_1.lib libboost_signals-vc80-mt-s-1_34_1.lib libboost_program_options-vc80-mt-s-1_34_1.lib libcurl.lib libeay32.lib libexpatMT.lib OpenJPEG.lib llaudio.lib llmedia.lib llcharacter.lib llcommon.lib llimage.lib llimagej2coj.lib llinventory.lib llmath.lib llmessage.lib llmozlib2-vc80.lib llprimitive.lib llrender.lib llui.lib llvfs.lib llwindow.lib llxml.lib lscript_library.lib mswsock.lib netapi32.lib odbc32.lib odbccp32.lib ogg_static_mt.lib ole32.lib oleaut32.lib opengl32.lib png12.lib psapi.lib qtmlclient.lib shell32.lib ssleay32.lib user32.lib Vfw32.lib vorbis_static_mt.lib vorbisenc_static_mt.lib vorbisfile_static_mt.lib winmm.lib winspool.lib ws2_32.lib xmlrpcepi.lib zlib.lib dnsapi.lib EZ_LCD_Wrapper_vc8.lib lgLcd.lib libndofdev.lib" 169 AdditionalDependencies="advapi32.lib apr-1.lib aprutil-1.lib areslib.lib comdlg32.lib dinput8.lib dxguid.lib fmodvc.lib freetype.lib gdi32.lib glu32.lib jpeglib_6b.lib kernel32.lib libboost_regex-vc80-mt-s-1_34_1.lib libboost_signals-vc80-mt-s-1_34_1.lib libboost_program_options-vc80-mt-s-1_34_1.lib libcurl.lib libeay32.lib libexpatMT.lib OpenJPEG.lib llaudio.lib llmedia.lib llcharacter.lib llcommon.lib llimage.lib llimagej2coj.lib llinventory.lib llmath.lib llmessage.lib llmozlib2-vc80.lib llprimitive.lib llrender.lib llui.lib llvfs.lib llwindow.lib llxml.lib lscript_library.lib mswsock.lib netapi32.lib odbc32.lib odbccp32.lib ogg_static_mt.lib ole32.lib oleaut32.lib opengl32.lib png12.lib psapi.lib qtmlclient.lib shell32.lib ssleay32.lib user32.lib Vfw32.lib vorbis_static_mt.lib vorbisenc_static_mt.lib vorbisfile_static_mt.lib winmm.lib winspool.lib ws2_32.lib xmlrpcepi.lib zlib.lib dnsapi.lib EZ_LCD_Wrapper_vc8.lib lgLcd.lib libndofdev.lib"
170 OutputFile="$(ConfigurationName)/newview.exe" 170 OutputFile="$(ConfigurationName)/newview.exe"
171 LinkIncremental="2" 171 LinkIncremental="2"
172 AdditionalLibraryDirectories="&quot;../lib_$(ConfigurationName)/i686-win32&quot;;&quot;../../libraries/i686-win32/lib_release&quot;" 172 AdditionalLibraryDirectories="&quot;../lib_$(ConfigurationName)/i686-win32&quot;;&quot;../../libraries/i686-win32/lib_release&quot;"
@@ -263,7 +263,7 @@
263 <Tool 263 <Tool
264 Name="VCLinkerTool" 264 Name="VCLinkerTool"
265 LinkLibraryDependencies="false" 265 LinkLibraryDependencies="false"
266 AdditionalDependencies="advapi32.lib apr-1.lib aprutil-1.lib areslib.lib comdlg32.lib dinput8.lib dsound.lib dxerr8.lib dxguid.lib fmodvc.lib freetype.lib gdi32.lib glu32.lib jpeglib_6b.lib kernel32.lib libboost_regex-vc80-mt-s-1_34_1.lib libboost_signals-vc80-mt-s-1_34_1.lib libcurl.lib libeay32.lib libexpatMT.lib OpenJPEG.lib llaudio.lib llmedia.lib llcharacter.lib llcommon.lib llimage.lib llimagej2coj.lib llinventory.lib llmath.lib llmessage.lib llmozlib2-vc80.lib llprimitive.lib llrender.lib llui.lib llvfs.lib llwindow.lib llxml.lib lscript_compile.lib lscript_library.lib mswsock.lib netapi32.lib odbc32.lib odbccp32.lib ogg_static_mt.lib ole32.lib oleaut32.lib opengl32.lib png12.lib psapi.lib qtmlclient.lib shell32.lib ssleay32.lib user32.lib Vfw32.lib vorbis_static_mt.lib vorbisenc_static_mt.lib vorbisfile_static_mt.lib winmm.lib winspool.lib ws2_32.lib xmlrpcepi.lib zlib.lib dnsapi.lib EZ_LCD_Wrapper_vc8.lib lgLcd.lib libndofdev.lib" 266 AdditionalDependencies="advapi32.lib apr-1.lib aprutil-1.lib areslib.lib comdlg32.lib dinput8.lib dxguid.lib fmodvc.lib freetype.lib gdi32.lib glu32.lib jpeglib_6b.lib kernel32.lib libboost_regex-vc80-mt-s-1_34_1.lib libboost_signals-vc80-mt-s-1_34_1.lib libcurl.lib libeay32.lib libexpatMT.lib OpenJPEG.lib llaudio.lib llmedia.lib llcharacter.lib llcommon.lib llimage.lib llimagej2coj.lib llinventory.lib llmath.lib llmessage.lib llmozlib2-vc80.lib llprimitive.lib llrender.lib llui.lib llvfs.lib llwindow.lib llxml.lib lscript_compile.lib lscript_library.lib mswsock.lib netapi32.lib odbc32.lib odbccp32.lib ogg_static_mt.lib ole32.lib oleaut32.lib opengl32.lib png12.lib psapi.lib qtmlclient.lib shell32.lib ssleay32.lib user32.lib Vfw32.lib vorbis_static_mt.lib vorbisenc_static_mt.lib vorbisfile_static_mt.lib winmm.lib winspool.lib ws2_32.lib xmlrpcepi.lib zlib.lib dnsapi.lib EZ_LCD_Wrapper_vc8.lib lgLcd.lib libndofdev.lib"
267 OutputFile="$(ConfigurationName)/SecondLife.exe" 267 OutputFile="$(ConfigurationName)/SecondLife.exe"
268 LinkIncremental="0" 268 LinkIncremental="0"
269 AdditionalLibraryDirectories="&quot;../lib_release/i686-win32&quot;;&quot;../../libraries/i686-win32/lib_release&quot;" 269 AdditionalLibraryDirectories="&quot;../lib_release/i686-win32&quot;;&quot;../../libraries/i686-win32/lib_release&quot;"
@@ -357,7 +357,7 @@
357 /> 357 />
358 <Tool 358 <Tool
359 Name="VCLinkerTool" 359 Name="VCLinkerTool"
360 AdditionalDependencies="advapi32.lib apr-1.lib aprutil-1.lib areslib.lib comdlg32.lib dinput8.lib dsound.lib dxerr8.lib dxguid.lib fmodvc.lib freetype.lib gdi32.lib glu32.lib jpeglib_6b.lib kernel32.lib libboost_regex-vc80-mt-s-1_34_1.lib libboost_signals-vc80-mt-s-1_34_1.lib libboost_program_options-vc80-mt-s-1_34_1.lib libcurl.lib libeay32.lib libexpatMT.lib OpenJPEG.lib llaudio.lib llmedia.lib llcharacter.lib llcommon.lib llimage.lib llimagej2coj.lib llinventory.lib llmath.lib llmessage.lib llmozlib2-vc80.lib llprimitive.lib llrender.lib llui.lib llvfs.lib llwindow.lib llxml.lib lscript_library.lib mswsock.lib netapi32.lib odbc32.lib odbccp32.lib ogg_static_mt.lib ole32.lib oleaut32.lib opengl32.lib png12.lib psapi.lib qtmlclient.lib shell32.lib ssleay32.lib user32.lib Vfw32.lib vorbis_static_mt.lib vorbisenc_static_mt.lib vorbisfile_static_mt.lib winmm.lib winspool.lib ws2_32.lib xmlrpcepi.lib zlib.lib dnsapi.lib lgLcd.lib EZ_LCD_Wrapper_vc8.lib libndofdev.lib" 360 AdditionalDependencies="advapi32.lib apr-1.lib aprutil-1.lib areslib.lib comdlg32.lib dinput8.lib dxguid.lib fmodvc.lib freetype.lib gdi32.lib glu32.lib jpeglib_6b.lib kernel32.lib libboost_regex-vc80-mt-s-1_34_1.lib libboost_signals-vc80-mt-s-1_34_1.lib libboost_program_options-vc80-mt-s-1_34_1.lib libcurl.lib libeay32.lib libexpatMT.lib OpenJPEG.lib llaudio.lib llmedia.lib llcharacter.lib llcommon.lib llimage.lib llimagej2coj.lib llinventory.lib llmath.lib llmessage.lib llmozlib2-vc80.lib llprimitive.lib llrender.lib llui.lib llvfs.lib llwindow.lib llxml.lib lscript_library.lib mswsock.lib netapi32.lib odbc32.lib odbccp32.lib ogg_static_mt.lib ole32.lib oleaut32.lib opengl32.lib png12.lib psapi.lib qtmlclient.lib shell32.lib ssleay32.lib user32.lib Vfw32.lib vorbis_static_mt.lib vorbisenc_static_mt.lib vorbisfile_static_mt.lib winmm.lib winspool.lib ws2_32.lib xmlrpcepi.lib zlib.lib dnsapi.lib lgLcd.lib EZ_LCD_Wrapper_vc8.lib libndofdev.lib"
361 OutputFile="$(ConfigurationName)/newview_noopt.exe" 361 OutputFile="$(ConfigurationName)/newview_noopt.exe"
362 LinkIncremental="2" 362 LinkIncremental="2"
363 AdditionalLibraryDirectories="&quot;../lib_releasenoopt/i686-win32&quot;;&quot;../../libraries/i686-win32/lib_release&quot;" 363 AdditionalLibraryDirectories="&quot;../lib_releasenoopt/i686-win32&quot;;&quot;../../libraries/i686-win32/lib_release&quot;"
@@ -421,6 +421,10 @@
421 > 421 >
422 </File> 422 </File>
423 <File 423 <File
424 RelativePath=".\llanimstatelabels.cpp"
425 >
426 </File>
427 <File
424 RelativePath=".\llappviewer.cpp" 428 RelativePath=".\llappviewer.cpp"
425 > 429 >
426 </File> 430 </File>
@@ -1437,6 +1441,10 @@
1437 > 1441 >
1438 </File> 1442 </File>
1439 <File 1443 <File
1444 RelativePath=".\llstylemap.cpp"
1445 >
1446 </File>
1447 <File
1440 RelativePath=".\llsurface.cpp" 1448 RelativePath=".\llsurface.cpp"
1441 > 1449 >
1442 </File> 1450 </File>
@@ -1549,6 +1557,10 @@
1549 > 1557 >
1550 </File> 1558 </File>
1551 <File 1559 <File
1560 RelativePath=".\lltrans.cpp"
1561 >
1562 </File>
1563 <File
1552 RelativePath=".\lluploaddialog.cpp" 1564 RelativePath=".\lluploaddialog.cpp"
1553 > 1565 >
1554 </File> 1566 </File>
@@ -1905,6 +1917,10 @@
1905 > 1917 >
1906 </File> 1918 </File>
1907 <File 1919 <File
1920 RelativePath=".\llwatchdog.cpp"
1921 >
1922 </File>
1923 <File
1908 RelativePath=".\llwaterparammanager.cpp" 1924 RelativePath=".\llwaterparammanager.cpp"
1909 > 1925 >
1910 </File> 1926 </File>
@@ -1995,6 +2011,10 @@
1995 > 2011 >
1996 </File> 2012 </File>
1997 <File 2013 <File
2014 RelativePath=".\llanimstatelabels.h"
2015 >
2016 </File>
2017 <File
1998 RelativePath=".\llappearance.h" 2018 RelativePath=".\llappearance.h"
1999 > 2019 >
2000 </File> 2020 </File>
@@ -2679,6 +2699,10 @@
2679 > 2699 >
2680 </File> 2700 </File>
2681 <File 2701 <File
2702 RelativePath=".\llmimetypes.h"
2703 >
2704 </File>
2705 <File
2682 RelativePath=".\llmorphview.h" 2706 RelativePath=".\llmorphview.h"
2683 > 2707 >
2684 </File> 2708 </File>
@@ -3031,6 +3055,10 @@
3031 > 3055 >
3032 </File> 3056 </File>
3033 <File 3057 <File
3058 RelativePath=".\llstylemap.h"
3059 >
3060 </File>
3061 <File
3034 RelativePath=".\llsurface.h" 3062 RelativePath=".\llsurface.h"
3035 > 3063 >
3036 </File> 3064 </File>
@@ -3151,6 +3179,10 @@
3151 > 3179 >
3152 </File> 3180 </File>
3153 <File 3181 <File
3182 RelativePath=".\lltrans.h"
3183 >
3184 </File>
3185 <File
3154 RelativePath=".\lluiconstants.h" 3186 RelativePath=".\lluiconstants.h"
3155 > 3187 >
3156 </File> 3188 </File>
@@ -3423,6 +3455,10 @@
3423 > 3455 >
3424 </File> 3456 </File>
3425 <File 3457 <File
3458 RelativePath=".\llwatchdog.h"
3459 >
3460 </File>
3461 <File
3426 RelativePath=".\llwaterparammanager.h" 3462 RelativePath=".\llwaterparammanager.h"
3427 > 3463 >
3428 </File> 3464 </File>
diff --git a/linden/indra/newview/newview_vc9.vcproj b/linden/indra/newview/newview_vc9.vcproj
index 40851cb..6b693b5 100644
--- a/linden/indra/newview/newview_vc9.vcproj
+++ b/linden/indra/newview/newview_vc9.vcproj
@@ -406,6 +406,10 @@
406 > 406 >
407 </File> 407 </File>
408 <File 408 <File
409 RelativePath=".\llanimstatelabels.cpp"
410 >
411 </File>
412 <File
409 RelativePath=".\llappviewer.cpp" 413 RelativePath=".\llappviewer.cpp"
410 > 414 >
411 </File> 415 </File>
@@ -1422,6 +1426,10 @@
1422 > 1426 >
1423 </File> 1427 </File>
1424 <File 1428 <File
1429 RelativePath=".\llstylemap.cpp"
1430 >
1431 </File>
1432 <File
1425 RelativePath=".\llsurface.cpp" 1433 RelativePath=".\llsurface.cpp"
1426 > 1434 >
1427 </File> 1435 </File>
@@ -1534,6 +1542,10 @@
1534 > 1542 >
1535 </File> 1543 </File>
1536 <File 1544 <File
1545 RelativePath=".\lltrans.cpp"
1546 >
1547 </File>
1548 <File
1537 RelativePath=".\lluploaddialog.cpp" 1549 RelativePath=".\lluploaddialog.cpp"
1538 > 1550 >
1539 </File> 1551 </File>
@@ -1890,6 +1902,10 @@
1890 > 1902 >
1891 </File> 1903 </File>
1892 <File 1904 <File
1905 RelativePath=".\llwatchdog.cpp"
1906 >
1907 </File>
1908 <File
1893 RelativePath=".\llwaterparammanager.cpp" 1909 RelativePath=".\llwaterparammanager.cpp"
1894 > 1910 >
1895 </File> 1911 </File>
@@ -1980,6 +1996,10 @@
1980 > 1996 >
1981 </File> 1997 </File>
1982 <File 1998 <File
1999 RelativePath=".\llanimstatelabels.h"
2000 >
2001 </File>
2002 <File
1983 RelativePath=".\llappearance.h" 2003 RelativePath=".\llappearance.h"
1984 > 2004 >
1985 </File> 2005 </File>
@@ -2664,6 +2684,10 @@
2664 > 2684 >
2665 </File> 2685 </File>
2666 <File 2686 <File
2687 RelativePath=".\llmimetypes.h"
2688 >
2689 </File>
2690 <File
2667 RelativePath=".\llmorphview.h" 2691 RelativePath=".\llmorphview.h"
2668 > 2692 >
2669 </File> 2693 </File>
@@ -3016,6 +3040,10 @@
3016 > 3040 >
3017 </File> 3041 </File>
3018 <File 3042 <File
3043 RelativePath=".\llstylemap.h"
3044 >
3045 </File>
3046 <File
3019 RelativePath=".\llsurface.h" 3047 RelativePath=".\llsurface.h"
3020 > 3048 >
3021 </File> 3049 </File>
@@ -3136,6 +3164,10 @@
3136 > 3164 >
3137 </File> 3165 </File>
3138 <File 3166 <File
3167 RelativePath=".\lltrans.h"
3168 >
3169 </File>
3170 <File
3139 RelativePath=".\lluiconstants.h" 3171 RelativePath=".\lluiconstants.h"
3140 > 3172 >
3141 </File> 3173 </File>
@@ -3408,6 +3440,10 @@
3408 > 3440 >
3409 </File> 3441 </File>
3410 <File 3442 <File
3443 RelativePath=".\llwatchdog.h"
3444 >
3445 </File>
3446 <File
3411 RelativePath=".\llwaterparammanager.h" 3447 RelativePath=".\llwaterparammanager.h"
3412 > 3448 >
3413 </File> 3449 </File>
diff --git a/linden/indra/newview/pipeline.cpp b/linden/indra/newview/pipeline.cpp
index 5ec3310..20fd5a7 100644
--- a/linden/indra/newview/pipeline.cpp
+++ b/linden/indra/newview/pipeline.cpp
@@ -50,7 +50,7 @@
50#include "v3color.h" 50#include "v3color.h"
51#include "llui.h" 51#include "llui.h"
52#include "llglheaders.h" 52#include "llglheaders.h"
53#include "llglimmediate.h" 53#include "llrender.h"
54 54
55// newview includes 55// newview includes
56#include "llagent.h" 56#include "llagent.h"
@@ -125,6 +125,7 @@ extern S32 gBoxFrame;
125extern BOOL gRenderLightGlows; 125extern BOOL gRenderLightGlows;
126extern BOOL gHideSelectedObjects; 126extern BOOL gHideSelectedObjects;
127extern BOOL gDisplaySwapBuffers; 127extern BOOL gDisplaySwapBuffers;
128extern BOOL gDebugGL;
128 129
129// hack counter for rendering a fixed number of frames after toggling 130// hack counter for rendering a fixed number of frames after toggling
130// fullscreen to work around DEV-5361 131// fullscreen to work around DEV-5361
@@ -134,6 +135,7 @@ BOOL gAvatarBacklight = FALSE;
134 135
135BOOL gRenderForSelect = FALSE; 136BOOL gRenderForSelect = FALSE;
136 137
138BOOL gDebugPipeline = FALSE;
137LLPipeline gPipeline; 139LLPipeline gPipeline;
138const LLMatrix4* gGLLastMatrix = NULL; 140const LLMatrix4* gGLLastMatrix = NULL;
139 141
@@ -504,11 +506,7 @@ void LLPipeline::createGLBuffers()
504 res = 128; 506 res = 128;
505 mCubeBuffer = new LLCubeMap(); 507 mCubeBuffer = new LLCubeMap();
506 mCubeBuffer->initGL(); 508 mCubeBuffer->initGL();
507 glBindTexture(GL_TEXTURE_CUBE_MAP_ARB, mCubeBuffer->getGLName()); 509 mCubeBuffer->setReflection();
508 glTexParameteri(GL_TEXTURE_CUBE_MAP_ARB, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
509 glTexParameteri(GL_TEXTURE_CUBE_MAP_ARB, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
510 glTexParameteri(GL_TEXTURE_CUBE_MAP_ARB, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
511 glTexParameteri(GL_TEXTURE_CUBE_MAP_ARB, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
512 510
513 for (U32 i = 0; i < 6; i++) 511 for (U32 i = 0; i < 6; i++)
514 { 512 {
@@ -1178,7 +1176,7 @@ void LLPipeline::updateCull(LLCamera& camera, LLCullResult& result, S32 water_cl
1178 LLGLDisable test(GL_ALPHA_TEST); 1176 LLGLDisable test(GL_ALPHA_TEST);
1179 LLViewerImage::unbindTexture(0, GL_TEXTURE_2D); 1177 LLViewerImage::unbindTexture(0, GL_TEXTURE_2D);
1180 1178
1181 glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE); 1179 gGL.setColorMask(false, false);
1182 LLGLDepthTest depth(GL_TRUE, GL_FALSE); 1180 LLGLDepthTest depth(GL_TRUE, GL_FALSE);
1183 1181
1184 for (LLWorld::region_list_t::iterator iter = LLWorld::getInstance()->getRegionList().begin(); 1182 for (LLWorld::region_list_t::iterator iter = LLWorld::getInstance()->getRegionList().begin();
@@ -1236,7 +1234,7 @@ void LLPipeline::updateCull(LLCamera& camera, LLCullResult& result, S32 water_cl
1236 sCull->pushDrawable(gSky.mVOGroundp->mDrawable); 1234 sCull->pushDrawable(gSky.mVOGroundp->mDrawable);
1237 } 1235 }
1238 1236
1239 glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_FALSE); 1237 gGL.setColorMask(true, false);
1240 glPopMatrix(); 1238 glPopMatrix();
1241 1239
1242 if (to_texture) 1240 if (to_texture)
@@ -1313,11 +1311,11 @@ void LLPipeline::doOcclusion(LLCamera& camera)
1313 LLVertexBuffer::unbind(); 1311 LLVertexBuffer::unbind();
1314 if (hasRenderDebugMask(LLPipeline::RENDER_DEBUG_OCCLUSION)) 1312 if (hasRenderDebugMask(LLPipeline::RENDER_DEBUG_OCCLUSION))
1315 { 1313 {
1316 glColorMask(GL_TRUE, GL_FALSE, GL_FALSE, GL_FALSE); 1314 gGL.setColorMask(true, false, false, false);
1317 } 1315 }
1318 else 1316 else
1319 { 1317 {
1320 glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE); 1318 gGL.setColorMask(false, false);
1321 } 1319 }
1322 LLGLDisable blend(GL_BLEND); 1320 LLGLDisable blend(GL_BLEND);
1323 LLGLDisable test(GL_ALPHA_TEST); 1321 LLGLDisable test(GL_ALPHA_TEST);
@@ -1334,7 +1332,7 @@ void LLPipeline::doOcclusion(LLCamera& camera)
1334 } 1332 }
1335 } 1333 }
1336 1334
1337 glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_FALSE); 1335 gGL.setColorMask(true, false);
1338 glFlush(); 1336 glFlush();
1339} 1337}
1340 1338
@@ -2262,11 +2260,9 @@ void LLPipeline::renderGeom(LLCamera& camera, BOOL forceVBOUpdate)
2262 LLVertexBuffer::unbind(); 2260 LLVertexBuffer::unbind();
2263 2261
2264 // Do verification of GL state 2262 // Do verification of GL state
2265#ifndef LL_RELEASE_FOR_DOWNLOAD
2266 LLGLState::checkStates(); 2263 LLGLState::checkStates();
2267 LLGLState::checkTextureChannels(); 2264 LLGLState::checkTextureChannels();
2268 LLGLState::checkClientArrays(); 2265 LLGLState::checkClientArrays();
2269#endif
2270 if (mRenderDebugMask & RENDER_DEBUG_VERIFY) 2266 if (mRenderDebugMask & RENDER_DEBUG_VERIFY)
2271 { 2267 {
2272 if (!verify()) 2268 if (!verify())
@@ -2384,19 +2380,18 @@ void LLPipeline::renderGeom(LLCamera& camera, BOOL forceVBOUpdate)
2384 } 2380 }
2385 poolp->endRenderPass(i); 2381 poolp->endRenderPass(i);
2386 LLVertexBuffer::unbind(); 2382 LLVertexBuffer::unbind();
2387#ifndef LL_RELEASE_FOR_DOWNLOAD 2383 if (gDebugGL || gDebugPipeline)
2388# if LL_DEBUG_GL
2389 GLint depth;
2390 glGetIntegerv(GL_MODELVIEW_STACK_DEPTH, &depth);
2391 if (depth > 3)
2392 { 2384 {
2393 llerrs << "GL matrix stack corrupted!" << llendl; 2385 GLint depth;
2386 glGetIntegerv(GL_MODELVIEW_STACK_DEPTH, &depth);
2387 if (depth > 3)
2388 {
2389 llerrs << "GL matrix stack corrupted!" << llendl;
2390 }
2391 LLGLState::checkStates();
2392 LLGLState::checkTextureChannels();
2393 LLGLState::checkClientArrays();
2394 } 2394 }
2395 LLGLState::checkStates();
2396 LLGLState::checkTextureChannels();
2397 LLGLState::checkClientArrays();
2398# endif
2399#endif
2400 } 2395 }
2401 } 2396 }
2402 else 2397 else
@@ -2417,11 +2412,9 @@ void LLPipeline::renderGeom(LLCamera& camera, BOOL forceVBOUpdate)
2417 } 2412 }
2418 2413
2419 LLVertexBuffer::unbind(); 2414 LLVertexBuffer::unbind();
2420#ifndef LL_RELEASE_FOR_DOWNLOAD
2421 LLGLState::checkStates(); 2415 LLGLState::checkStates();
2422 LLGLState::checkTextureChannels(); 2416 LLGLState::checkTextureChannels();
2423 LLGLState::checkClientArrays(); 2417 LLGLState::checkClientArrays();
2424#endif
2425 2418
2426 gGLLastMatrix = NULL; 2419 gGLLastMatrix = NULL;
2427 glLoadMatrixd(gGLModelView); 2420 glLoadMatrixd(gGLModelView);
@@ -2436,12 +2429,10 @@ void LLPipeline::renderGeom(LLCamera& camera, BOOL forceVBOUpdate)
2436 2429
2437 stop_glerror(); 2430 stop_glerror();
2438 2431
2439#ifndef LL_RELEASE_FOR_DOWNLOAD 2432 LLGLState::checkStates();
2440 LLGLState::checkStates(); 2433 LLGLState::checkTextureChannels();
2441 LLGLState::checkTextureChannels(); 2434 LLGLState::checkClientArrays();
2442 LLGLState::checkClientArrays(); 2435
2443#endif
2444
2445 if (!sReflectionRender) 2436 if (!sReflectionRender)
2446 { 2437 {
2447 renderHighlights(); 2438 renderHighlights();
@@ -2475,11 +2466,9 @@ void LLPipeline::renderGeom(LLCamera& camera, BOOL forceVBOUpdate)
2475 2466
2476 LLVertexBuffer::unbind(); 2467 LLVertexBuffer::unbind();
2477 2468
2478#ifndef LL_RELEASE_FOR_DOWNLOAD
2479 LLGLState::checkStates(); 2469 LLGLState::checkStates();
2480 LLGLState::checkTextureChannels(); 2470 LLGLState::checkTextureChannels();
2481 LLGLState::checkClientArrays(); 2471 LLGLState::checkClientArrays();
2482#endif
2483} 2472}
2484 2473
2485void LLPipeline::renderGeomDeferred() 2474void LLPipeline::renderGeomDeferred()
@@ -2514,7 +2503,7 @@ void LLPipeline::renderDebug()
2514 2503
2515 gGLLastMatrix = NULL; 2504 gGLLastMatrix = NULL;
2516 glLoadMatrixd(gGLModelView); 2505 glLoadMatrixd(gGLModelView);
2517 glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_FALSE); 2506 gGL.setColorMask(true, false);
2518 2507
2519 // Debug stuff. 2508 // Debug stuff.
2520 for (LLWorld::region_list_t::iterator iter = LLWorld::getInstance()->getRegionList().begin(); 2509 for (LLWorld::region_list_t::iterator iter = LLWorld::getInstance()->getRegionList().begin();
@@ -2585,7 +2574,7 @@ void LLPipeline::renderForSelect(std::set<LLViewerObject*>& objects)
2585{ 2574{
2586 assertInitialized(); 2575 assertInitialized();
2587 2576
2588 glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_FALSE); 2577 gGL.setColorMask(true, false);
2589 gPipeline.resetDrawOrders(); 2578 gPipeline.resetDrawOrders();
2590 2579
2591 for (std::set<LLViewerObject*>::iterator iter = objects.begin(); iter != objects.end(); ++iter) 2580 for (std::set<LLViewerObject*>::iterator iter = objects.begin(); iter != objects.end(); ++iter)
@@ -2607,12 +2596,11 @@ void LLPipeline::renderForSelect(std::set<LLViewerObject*>& objects)
2607 LLVertexBuffer::unbind(); 2596 LLVertexBuffer::unbind();
2608 2597
2609 //for each drawpool 2598 //for each drawpool
2610#ifndef LL_RELEASE_FOR_DOWNLOAD
2611 LLGLState::checkStates(); 2599 LLGLState::checkStates();
2612 LLGLState::checkTextureChannels(); 2600 LLGLState::checkTextureChannels();
2613 LLGLState::checkClientArrays(); 2601 LLGLState::checkClientArrays();
2614 U32 last_type = 0; 2602 U32 last_type = 0;
2615#endif 2603
2616 for (pool_set_t::iterator iter = mPools.begin(); iter != mPools.end(); ++iter) 2604 for (pool_set_t::iterator iter = mPools.begin(); iter != mPools.end(); ++iter)
2617 { 2605 {
2618 LLDrawPool *poolp = *iter; 2606 LLDrawPool *poolp = *iter;
@@ -2624,7 +2612,6 @@ void LLPipeline::renderForSelect(std::set<LLViewerObject*>& objects)
2624 gGLLastMatrix = NULL; 2612 gGLLastMatrix = NULL;
2625 glLoadMatrixd(gGLModelView); 2613 glLoadMatrixd(gGLModelView);
2626 2614
2627#ifndef LL_RELEASE_FOR_DOWNLOAD
2628 if (poolp->getType() != last_type) 2615 if (poolp->getType() != last_type)
2629 { 2616 {
2630 last_type = poolp->getType(); 2617 last_type = poolp->getType();
@@ -2632,32 +2619,21 @@ void LLPipeline::renderForSelect(std::set<LLViewerObject*>& objects)
2632 LLGLState::checkTextureChannels(); 2619 LLGLState::checkTextureChannels();
2633 LLGLState::checkClientArrays(); 2620 LLGLState::checkClientArrays();
2634 } 2621 }
2635#endif
2636 } 2622 }
2637 } 2623 }
2638 2624
2639 LLGLEnable alpha_test(GL_ALPHA_TEST); 2625 LLGLEnable alpha_test(GL_ALPHA_TEST);
2640 if (gPickTransparent) 2626 if (gPickTransparent)
2641 { 2627 {
2642 glAlphaFunc(GL_GEQUAL, 0.0f); 2628 gGL.setAlphaRejectSettings(LLRender::CF_GREATER_EQUAL, 0.f);
2643 } 2629 }
2644 else 2630 else
2645 { 2631 {
2646 glAlphaFunc(GL_GREATER, 0.2f); 2632 gGL.setAlphaRejectSettings(LLRender::CF_GREATER, 0.2f);
2647 } 2633 }
2648 2634
2649 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB); 2635 gGL.getTexUnit(0)->setTextureColorBlend(LLTexUnit::TBO_REPLACE, LLTexUnit::TBS_VERT_COLOR);
2650 glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_REPLACE); 2636 gGL.getTexUnit(0)->setTextureAlphaBlend(LLTexUnit::TBO_MULT, LLTexUnit::TBS_TEX_ALPHA, LLTexUnit::TBS_VERT_ALPHA);
2651 glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA_ARB, GL_MODULATE);
2652
2653 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB, GL_PRIMARY_COLOR);
2654 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB_ARB, GL_SRC_COLOR);
2655
2656 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA_ARB, GL_TEXTURE);
2657 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_ALPHA_ARB, GL_SRC_ALPHA);
2658
2659 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_ALPHA_ARB, GL_PRIMARY_COLOR_ARB);
2660 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_ALPHA_ARB, GL_SRC_ALPHA);
2661 2637
2662 U32 prim_mask = LLVertexBuffer::MAP_VERTEX | 2638 U32 prim_mask = LLVertexBuffer::MAP_VERTEX |
2663 LLVertexBuffer::MAP_TEXCOORD; 2639 LLVertexBuffer::MAP_TEXCOORD;
@@ -2758,12 +2734,11 @@ void LLPipeline::renderForSelect(std::set<LLViewerObject*>& objects)
2758 glViewport(gGLViewport[0], gGLViewport[1], gGLViewport[2], gGLViewport[3]); 2734 glViewport(gGLViewport[0], gGLViewport[1], gGLViewport[2], gGLViewport[3]);
2759 } 2735 }
2760 2736
2761 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); 2737 gGL.getTexUnit(0)->setTextureBlendType(LLTexUnit::TB_MULT);
2762 2738
2763 LLVertexBuffer::unbind(); 2739 LLVertexBuffer::unbind();
2764 LLVertexBuffer::unbind();
2765 2740
2766 glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); 2741 gGL.setColorMask(true, true);
2767} 2742}
2768 2743
2769void LLPipeline::renderFaceForUVSelect(LLFace* facep) 2744void LLPipeline::renderFaceForUVSelect(LLFace* facep)
@@ -4118,11 +4093,9 @@ void apply_cube_face_rotation(U32 face)
4118} 4093}
4119void LLPipeline::generateReflectionMap(LLCubeMap* cube_map, LLCamera& cube_cam) 4094void LLPipeline::generateReflectionMap(LLCubeMap* cube_map, LLCamera& cube_cam)
4120{ 4095{
4121#ifndef LL_RELEASE_FOR_DOWNLOAD
4122 LLGLState::checkStates(); 4096 LLGLState::checkStates();
4123 LLGLState::checkTextureChannels(); 4097 LLGLState::checkTextureChannels();
4124 LLGLState::checkClientArrays(); 4098 LLGLState::checkClientArrays();
4125#endif
4126 4099
4127 assertInitialized(); 4100 assertInitialized();
4128 4101
@@ -4140,10 +4113,7 @@ void LLPipeline::generateReflectionMap(LLCubeMap* cube_map, LLCamera& cube_cam)
4140 glGetTexLevelParameteriv(GL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB, 0, GL_TEXTURE_WIDTH, &width); 4113 glGetTexLevelParameteriv(GL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB, 0, GL_TEXTURE_WIDTH, &width);
4141 if (width != res) 4114 if (width != res)
4142 { 4115 {
4143 glTexParameteri(GL_TEXTURE_CUBE_MAP_ARB, GL_TEXTURE_MIN_FILTER, GL_LINEAR); 4116 cube_map->setReflection();
4144 glTexParameteri(GL_TEXTURE_CUBE_MAP_ARB, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
4145 glTexParameteri(GL_TEXTURE_CUBE_MAP_ARB, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
4146 glTexParameteri(GL_TEXTURE_CUBE_MAP_ARB, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
4147 4117
4148 for (U32 i = 0; i < 6; i++) 4118 for (U32 i = 0; i < 6; i++)
4149 { 4119 {
@@ -4224,9 +4194,9 @@ void LLPipeline::generateReflectionMap(LLCubeMap* cube_map, LLCamera& cube_cam)
4224 gPipeline.stateSort(cube_cam, result); 4194 gPipeline.stateSort(cube_cam, result);
4225 4195
4226 glClearColor(0,0,0,0); 4196 glClearColor(0,0,0,0);
4227 glColorMask(GL_TRUE,GL_TRUE,GL_TRUE,GL_TRUE); 4197 gGL.setColorMask(true, true);
4228 glClear(GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT); 4198 glClear(GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT);
4229 glColorMask(GL_TRUE,GL_TRUE,GL_TRUE,GL_FALSE); 4199 gGL.setColorMask(true, false);
4230 stop_glerror(); 4200 stop_glerror();
4231 gPipeline.renderGeom(cube_cam); 4201 gPipeline.renderGeom(cube_cam);
4232 } 4202 }
@@ -4254,12 +4224,9 @@ void LLPipeline::generateReflectionMap(LLCubeMap* cube_map, LLCamera& cube_cam)
4254 LLPipeline::sSkipUpdate = FALSE; 4224 LLPipeline::sSkipUpdate = FALSE;
4255 LLPipeline::sReflectionRender = FALSE; 4225 LLPipeline::sReflectionRender = FALSE;
4256 4226
4257#ifndef LL_RELEASE_FOR_DOWNLOAD
4258 LLGLState::checkStates(); 4227 LLGLState::checkStates();
4259 LLGLState::checkTextureChannels(); 4228 LLGLState::checkTextureChannels();
4260 LLGLState::checkClientArrays(); 4229 LLGLState::checkClientArrays();
4261#endif
4262
4263} 4230}
4264 4231
4265//send cube map vertices and texture coordinates 4232//send cube map vertices and texture coordinates
@@ -4336,18 +4303,16 @@ void validate_framebuffer_object()
4336 4303
4337void LLPipeline::blurReflectionMap(LLCubeMap* cube_in, LLCubeMap* cube_out) 4304void LLPipeline::blurReflectionMap(LLCubeMap* cube_in, LLCubeMap* cube_out)
4338{ 4305{
4339#ifndef LL_RELEASE_FOR_DOWNLOAD
4340 LLGLState::checkStates(); 4306 LLGLState::checkStates();
4341 LLGLState::checkTextureChannels(); 4307 LLGLState::checkTextureChannels();
4342 LLGLState::checkClientArrays(); 4308 LLGLState::checkClientArrays();
4343#endif
4344 4309
4345 assertInitialized(); 4310 assertInitialized();
4346 4311
4347 U32 res = (U32) gSavedSettings.getS32("RenderReflectionRes"); 4312 U32 res = (U32) gSavedSettings.getS32("RenderReflectionRes");
4348 enableLightsFullbright(LLColor4::white); 4313 enableLightsFullbright(LLColor4::white);
4349 LLGLDepthTest depth(GL_FALSE); 4314 LLGLDepthTest depth(GL_FALSE);
4350 glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); 4315 gGL.setColorMask(true, true);
4351 glMatrixMode(GL_PROJECTION); 4316 glMatrixMode(GL_PROJECTION);
4352 glPushMatrix(); 4317 glPushMatrix();
4353 glLoadIdentity(); 4318 glLoadIdentity();
@@ -4361,10 +4326,7 @@ void LLPipeline::blurReflectionMap(LLCubeMap* cube_in, LLCubeMap* cube_out)
4361 glGetTexLevelParameteriv(GL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB, 0, GL_TEXTURE_WIDTH, &width); 4326 glGetTexLevelParameteriv(GL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB, 0, GL_TEXTURE_WIDTH, &width);
4362 if (width != res) 4327 if (width != res)
4363 { 4328 {
4364 glTexParameteri(GL_TEXTURE_CUBE_MAP_ARB, GL_TEXTURE_MIN_FILTER, GL_LINEAR); 4329 cube_out->setReflection();
4365 glTexParameteri(GL_TEXTURE_CUBE_MAP_ARB, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
4366 glTexParameteri(GL_TEXTURE_CUBE_MAP_ARB, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
4367 glTexParameteri(GL_TEXTURE_CUBE_MAP_ARB, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
4368 4330
4369 for (U32 i = 0; i < 6; i++) 4331 for (U32 i = 0; i < 6; i++)
4370 { 4332 {
@@ -4391,7 +4353,7 @@ void LLPipeline::blurReflectionMap(LLCubeMap* cube_in, LLCubeMap* cube_out)
4391 4353
4392 stop_glerror(); 4354 stop_glerror();
4393 glViewport(0,0,res, res); 4355 glViewport(0,0,res, res);
4394 gGL.blendFunc(GL_ONE, GL_ONE); 4356 gGL.setSceneBlendType(LLRender::BT_ADD);
4395 cube_in->enableTexture(0); 4357 cube_in->enableTexture(0);
4396 //3-axis blur 4358 //3-axis blur
4397 for (U32 j = 0; j < 3; j++) 4359 for (U32 j = 0; j < 3; j++)
@@ -4421,7 +4383,7 @@ void LLPipeline::blurReflectionMap(LLCubeMap* cube_in, LLCubeMap* cube_out)
4421 gl_cube_face[i], 4383 gl_cube_face[i],
4422 j < 2 ? mBlurCubeTexture[j] : cube_out->getGLName(), 0); 4384 j < 2 ? mBlurCubeTexture[j] : cube_out->getGLName(), 0);
4423 validate_framebuffer_object(); 4385 validate_framebuffer_object();
4424 glColorMask(GL_TRUE,GL_TRUE,GL_TRUE,GL_TRUE); 4386 gGL.setColorMask(true, true);
4425 glClear(GL_COLOR_BUFFER_BIT); 4387 glClear(GL_COLOR_BUFFER_BIT);
4426 glLoadIdentity(); 4388 glLoadIdentity();
4427 apply_cube_face_rotation(i); 4389 apply_cube_face_rotation(i);
@@ -4441,7 +4403,7 @@ void LLPipeline::blurReflectionMap(LLCubeMap* cube_in, LLCubeMap* cube_out)
4441 glBindTexture(GL_TEXTURE_CUBE_MAP_ARB, 0); 4403 glBindTexture(GL_TEXTURE_CUBE_MAP_ARB, 0);
4442 4404
4443 glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0); 4405 glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0);
4444 glColorMask(GL_TRUE,GL_TRUE,GL_TRUE,GL_FALSE); 4406 gGL.setColorMask(true, false);
4445 glMatrixMode(GL_PROJECTION); 4407 glMatrixMode(GL_PROJECTION);
4446 glPopMatrix(); 4408 glPopMatrix();
4447 glMatrixMode(GL_MODELVIEW); 4409 glMatrixMode(GL_MODELVIEW);
@@ -4449,13 +4411,11 @@ void LLPipeline::blurReflectionMap(LLCubeMap* cube_in, LLCubeMap* cube_out)
4449 4411
4450 cube_in->disableTexture(); 4412 cube_in->disableTexture();
4451 gViewerWindow->setupViewport(); 4413 gViewerWindow->setupViewport();
4452 gGL.blendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); 4414 gGL.setSceneBlendType(LLRender::BT_ALPHA);
4453 4415
4454#ifndef LL_RELEASE_FOR_DOWNLOAD
4455 LLGLState::checkStates(); 4416 LLGLState::checkStates();
4456 LLGLState::checkTextureChannels(); 4417 LLGLState::checkTextureChannels();
4457 LLGLState::checkClientArrays(); 4418 LLGLState::checkClientArrays();
4458#endif
4459} 4419}
4460 4420
4461void LLPipeline::bindScreenToTexture() 4421void LLPipeline::bindScreenToTexture()
@@ -4471,10 +4431,8 @@ void LLPipeline::renderBloom(BOOL for_snapshot)
4471 return; 4431 return;
4472 } 4432 }
4473 4433
4474#ifndef LL_RELEASE_FOR_DOWNLOAD
4475 LLGLState::checkStates(); 4434 LLGLState::checkStates();
4476 LLGLState::checkTextureChannels(); 4435 LLGLState::checkTextureChannels();
4477#endif
4478 4436
4479 assertInitialized(); 4437 assertInitialized();
4480 4438
@@ -4494,7 +4452,7 @@ void LLPipeline::renderBloom(BOOL for_snapshot)
4494 tc2 /= (F32) res_mod; 4452 tc2 /= (F32) res_mod;
4495 } 4453 }
4496 4454
4497 glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); 4455 gGL.setColorMask(true, true);
4498 4456
4499 LLFastTimer ftm(LLFastTimer::FTM_RENDER_BLOOM); 4457 LLFastTimer ftm(LLFastTimer::FTM_RENDER_BLOOM);
4500 gGL.color4f(1,1,1,1); 4458 gGL.color4f(1,1,1,1);
@@ -4513,7 +4471,7 @@ void LLPipeline::renderBloom(BOOL for_snapshot)
4513 4471
4514 LLGLDisable test(GL_ALPHA_TEST); 4472 LLGLDisable test(GL_ALPHA_TEST);
4515 4473
4516 glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); 4474 gGL.setColorMask(true, true);
4517 glClearColor(0,0,0,0); 4475 glClearColor(0,0,0,0);
4518 4476
4519 if (for_snapshot) 4477 if (for_snapshot)
@@ -4525,7 +4483,7 @@ void LLPipeline::renderBloom(BOOL for_snapshot)
4525 //glStencilOp(GL_KEEP, GL_KEEP, GL_KEEP); 4483 //glStencilOp(GL_KEEP, GL_KEEP, GL_KEEP);
4526 //LLGLDisable blend(GL_BLEND); 4484 //LLGLDisable blend(GL_BLEND);
4527 LLGLEnable blend(GL_BLEND); 4485 LLGLEnable blend(GL_BLEND);
4528 gGL.blendFunc(GL_ONE, GL_ONE); 4486 gGL.setSceneBlendType(LLRender::BT_ADD);
4529 tc2.setVec(1,1); 4487 tc2.setVec(1,1);
4530 gGL.begin(LLVertexBuffer::TRIANGLE_STRIP); 4488 gGL.begin(LLVertexBuffer::TRIANGLE_STRIP);
4531 gGL.color4f(1,1,1,1); 4489 gGL.color4f(1,1,1,1);
@@ -4543,7 +4501,7 @@ void LLPipeline::renderBloom(BOOL for_snapshot)
4543 gGL.end(); 4501 gGL.end();
4544 4502
4545 gGL.flush(); 4503 gGL.flush();
4546 gGL.blendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); 4504 gGL.setSceneBlendType(LLRender::BT_ALPHA);
4547 } 4505 }
4548 4506
4549 gGL.flush(); 4507 gGL.flush();
@@ -4575,8 +4533,8 @@ void LLPipeline::renderBloom(BOOL for_snapshot)
4575 gGlowExtractProgram.uniform1f("warmthAmount", warmthAmount); 4533 gGlowExtractProgram.uniform1f("warmthAmount", warmthAmount);
4576 LLGLEnable blend_on(GL_BLEND); 4534 LLGLEnable blend_on(GL_BLEND);
4577 LLGLEnable test(GL_ALPHA_TEST); 4535 LLGLEnable test(GL_ALPHA_TEST);
4578 glAlphaFunc(GL_GREATER, 0.f); 4536 gGL.setAlphaRejectSettings(LLRender::CF_DEFAULT);
4579 gGL.blendFunc(GL_SRC_ALPHA, GL_ONE); 4537 gGL.setSceneBlendType(LLRender::BT_ADD_WITH_ALPHA);
4580 LLViewerImage::unbindTexture(0, GL_TEXTURE_2D); 4538 LLViewerImage::unbindTexture(0, GL_TEXTURE_2D);
4581 4539
4582 glDisable(GL_TEXTURE_2D); 4540 glDisable(GL_TEXTURE_2D);
@@ -4785,26 +4743,17 @@ void LLPipeline::renderBloom(BOOL for_snapshot)
4785 4743
4786 LLGLDisable blend(GL_BLEND); 4744 LLGLDisable blend(GL_BLEND);
4787 4745
4788
4789 //tex unit 0 4746 //tex unit 0
4790 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB); 4747 gGL.getTexUnit(0)->setTextureColorBlend(LLTexUnit::TBO_REPLACE, LLTexUnit::TBS_TEX_COLOR);
4791 glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_REPLACE);
4792 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB, GL_TEXTURE);
4793 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB_ARB, GL_SRC_COLOR);
4794 4748
4795 mGlow[1].bindTexture(); 4749 mGlow[1].bindTexture();
4796 glEnableClientState(GL_TEXTURE_COORD_ARRAY); 4750 glEnableClientState(GL_TEXTURE_COORD_ARRAY);
4797 glTexCoordPointer(2, GL_FLOAT, 0, uv0); 4751 glTexCoordPointer(2, GL_FLOAT, 0, uv0);
4798 glActiveTextureARB(GL_TEXTURE1_ARB); 4752 gGL.getTexUnit(1)->activate();
4799 glEnable(GL_TEXTURE_RECTANGLE_ARB); 4753 glEnable(GL_TEXTURE_RECTANGLE_ARB);
4800 4754
4801 //tex unit 1 4755 //tex unit 1
4802 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB); 4756 gGL.getTexUnit(1)->setTextureColorBlend(LLTexUnit::TBO_ADD, LLTexUnit::TBS_TEX_COLOR, LLTexUnit::TBS_PREV_COLOR);
4803 glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_ADD);
4804 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB, GL_PREVIOUS_ARB);
4805 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB_ARB, GL_SRC_COLOR);
4806 glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_RGB_ARB, GL_TEXTURE);
4807 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_RGB_ARB, GL_SRC_COLOR);
4808 4757
4809 glClientActiveTextureARB(GL_TEXTURE1_ARB); 4758 glClientActiveTextureARB(GL_TEXTURE1_ARB);
4810 glEnableClientState(GL_TEXTURE_COORD_ARRAY); 4759 glEnableClientState(GL_TEXTURE_COORD_ARRAY);
@@ -4819,23 +4768,23 @@ void LLPipeline::renderBloom(BOOL for_snapshot)
4819 4768
4820 glDisable(GL_TEXTURE_RECTANGLE_ARB); 4769 glDisable(GL_TEXTURE_RECTANGLE_ARB);
4821 glDisableClientState(GL_TEXTURE_COORD_ARRAY); 4770 glDisableClientState(GL_TEXTURE_COORD_ARRAY);
4822 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); 4771 gGL.getTexUnit(1)->setTextureBlendType(LLTexUnit::TB_MULT);
4823 glClientActiveTextureARB(GL_TEXTURE0_ARB); 4772 glClientActiveTextureARB(GL_TEXTURE0_ARB);
4824 glActiveTextureARB(GL_TEXTURE0_ARB); 4773 gGL.getTexUnit(0)->activate();
4825 glDisableClientState(GL_TEXTURE_COORD_ARRAY); 4774 glDisableClientState(GL_TEXTURE_COORD_ARRAY);
4826 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); 4775 gGL.getTexUnit(0)->setTextureBlendType(LLTexUnit::TB_MULT);
4827 } 4776 }
4828 4777
4829 glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); 4778 gGL.setSceneBlendType(LLRender::BT_ALPHA);
4830 glMatrixMode(GL_PROJECTION); 4779 glMatrixMode(GL_PROJECTION);
4831 glPopMatrix(); 4780 glPopMatrix();
4832 glMatrixMode(GL_MODELVIEW); 4781 glMatrixMode(GL_MODELVIEW);
4833 glPopMatrix(); 4782 glPopMatrix();
4834 4783
4835#ifndef LL_RELEASE_FOR_DOWNLOAD 4784 LLVertexBuffer::unbind();
4785
4836 LLGLState::checkStates(); 4786 LLGLState::checkStates();
4837 LLGLState::checkTextureChannels(); 4787 LLGLState::checkTextureChannels();
4838#endif
4839 4788
4840} 4789}
4841 4790
@@ -4867,11 +4816,9 @@ void LLPipeline::generateWaterReflection(LLCamera& camera_in)
4867 { 4816 {
4868 LLVertexBuffer::unbind(); 4817 LLVertexBuffer::unbind();
4869 4818
4870#ifndef LL_RELEASE_FOR_DOWNLOAD
4871 LLGLState::checkStates(); 4819 LLGLState::checkStates();
4872 LLGLState::checkTextureChannels(); 4820 LLGLState::checkTextureChannels();
4873 LLGLState::checkClientArrays(); 4821 LLGLState::checkClientArrays();
4874#endif
4875 4822
4876 LLCamera camera = camera_in; 4823 LLCamera camera = camera_in;
4877 camera.setFar(camera.getFar()*0.87654321f); 4824 camera.setFar(camera.getFar()*0.87654321f);
@@ -4916,11 +4863,11 @@ void LLPipeline::generateWaterReflection(LLCamera& camera_in)
4916 { //generate planar reflection map 4863 { //generate planar reflection map
4917 LLViewerImage::unbindTexture(0, GL_TEXTURE_2D); 4864 LLViewerImage::unbindTexture(0, GL_TEXTURE_2D);
4918 glClearColor(0,0,0,0); 4865 glClearColor(0,0,0,0);
4919 glColorMask(GL_TRUE,GL_TRUE,GL_TRUE,GL_TRUE); 4866 gGL.setColorMask(true, true);
4920 mWaterRef.bindTarget(); 4867 mWaterRef.bindTarget();
4921 mWaterRef.getViewport(gGLViewport); 4868 mWaterRef.getViewport(gGLViewport);
4922 mWaterRef.clear(); 4869 mWaterRef.clear();
4923 glColorMask(GL_TRUE,GL_TRUE,GL_TRUE,GL_FALSE); 4870 gGL.setColorMask(true, false);
4924 4871
4925 stop_glerror(); 4872 stop_glerror();
4926 4873
@@ -5022,11 +4969,11 @@ void LLPipeline::generateWaterReflection(LLCamera& camera_in)
5022 LLViewerImage::unbindTexture(0, GL_TEXTURE_2D); 4969 LLViewerImage::unbindTexture(0, GL_TEXTURE_2D);
5023 LLColor4& col = LLDrawPoolWater::sWaterFogColor; 4970 LLColor4& col = LLDrawPoolWater::sWaterFogColor;
5024 glClearColor(col.mV[0], col.mV[1], col.mV[2], 0.f); 4971 glClearColor(col.mV[0], col.mV[1], col.mV[2], 0.f);
5025 glColorMask(GL_TRUE,GL_TRUE,GL_TRUE,GL_TRUE); 4972 gGL.setColorMask(true, true);
5026 mWaterDis.bindTarget(); 4973 mWaterDis.bindTarget();
5027 mWaterDis.getViewport(gGLViewport); 4974 mWaterDis.getViewport(gGLViewport);
5028 mWaterDis.clear(); 4975 mWaterDis.clear();
5029 glColorMask(GL_TRUE,GL_TRUE,GL_TRUE,GL_FALSE); 4976 gGL.setColorMask(true, false);
5030 4977
5031 if (!LLPipeline::sUnderWaterRender || LLDrawPoolWater::sNeedsReflectionUpdate) 4978 if (!LLPipeline::sUnderWaterRender || LLDrawPoolWater::sNeedsReflectionUpdate)
5032 { 4979 {
@@ -5060,11 +5007,9 @@ void LLPipeline::generateWaterReflection(LLCamera& camera_in)
5060 LLViewerCamera::getInstance()->setUserClipPlane(LLPlane(-pnorm, -pd)); 5007 LLViewerCamera::getInstance()->setUserClipPlane(LLPlane(-pnorm, -pd));
5061 LLPipeline::sUseOcclusion = occlusion; 5008 LLPipeline::sUseOcclusion = occlusion;
5062 5009
5063#ifndef LL_RELEASE_FOR_DOWNLOAD
5064 LLGLState::checkStates(); 5010 LLGLState::checkStates();
5065 LLGLState::checkTextureChannels(); 5011 LLGLState::checkTextureChannels();
5066 LLGLState::checkClientArrays(); 5012 LLGLState::checkClientArrays();
5067#endif
5068 } 5013 }
5069} 5014}
5070 5015
@@ -5203,7 +5148,7 @@ void LLPipeline::generateImpostor(LLVOAvatar* avatar)
5203 glh_set_current_modelview(mat); 5148 glh_set_current_modelview(mat);
5204 5149
5205 glClearColor(0.0f,0.0f,0.0f,0.0f); 5150 glClearColor(0.0f,0.0f,0.0f,0.0f);
5206 glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); 5151 gGL.setColorMask(true, true);
5207 glStencilMask(0xFFFFFFFF); 5152 glStencilMask(0xFFFFFFFF);
5208 glClearStencil(0); 5153 glClearStencil(0);
5209 5154
@@ -5250,14 +5195,14 @@ void LLPipeline::generateImpostor(LLVOAvatar* avatar)
5250 5195
5251 if (muted) 5196 if (muted)
5252 { 5197 {
5253 glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); 5198 gGL.setColorMask(true, true);
5254 } 5199 }
5255 else 5200 else
5256 { 5201 {
5257 glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_TRUE); 5202 gGL.setColorMask(false, true);
5258 } 5203 }
5259 5204
5260 gGL.blendFunc(GL_ONE, GL_ONE); 5205 gGL.setSceneBlendType(LLRender::BT_ADD);
5261 LLImageGL::unbindTexture(0, GL_TEXTURE_2D); 5206 LLImageGL::unbindTexture(0, GL_TEXTURE_2D);
5262 5207
5263 LLGLDepthTest depth(GL_FALSE, GL_FALSE); 5208 LLGLDepthTest depth(GL_FALSE, GL_FALSE);
@@ -5273,7 +5218,7 @@ void LLPipeline::generateImpostor(LLVOAvatar* avatar)
5273 gGL.flush(); 5218 gGL.flush();
5274 5219
5275 5220
5276 gGL.blendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); 5221 gGL.setSceneBlendType(LLRender::BT_ALPHA);
5277 } 5222 }
5278 5223
5279 5224
diff --git a/linden/indra/newview/pipeline.h b/linden/indra/newview/pipeline.h
index 9896a4a..bd857c2 100644
--- a/linden/indra/newview/pipeline.h
+++ b/linden/indra/newview/pipeline.h
@@ -550,6 +550,7 @@ void render_bbox(const LLVector3 &min, const LLVector3 &max);
550 550
551extern LLPipeline gPipeline; 551extern LLPipeline gPipeline;
552extern BOOL gRenderForSelect; 552extern BOOL gRenderForSelect;
553extern BOOL gDebugPipeline;
553extern const LLMatrix4* gGLLastMatrix; 554extern const LLMatrix4* gGLLastMatrix;
554 555
555#endif 556#endif
diff --git a/linden/indra/newview/releasenotes.txt b/linden/indra/newview/releasenotes.txt
index b6b38d8..12cd9fb 100644
--- a/linden/indra/newview/releasenotes.txt
+++ b/linden/indra/newview/releasenotes.txt
@@ -1,3 +1,119 @@
1Release Notes for Second Life 1.20(7) May 16th, 2008
2=====================================
3
4New features and changes:
5* Pasting multiline clipboard content into Chat will show a Paragraph symbol at newlines
6* Moved "Set Window Size" options from File menu into Preferences > Graphics
7* New users are rendered as a cloud, rather than naked, before they choose a gender
8* Directly interacting with a muted resident will unmute them, with a note logged in the Chat history (VWR-1735)
9* Fly button is now shown as disabled when you are sitting
10* Group Info > Notices tab explains the storage limits of 200 notices and 14 days
11* Added OpenGL monitoring via Advanced menu > Rendering > Debug GL option to turn on extra rendering error checking and help reproduce crashes
12* Added beta support for basic voice lipsync for voice visualization (VWR-4794) - via Advanced menu > Character
13* Changed resident names to be interactive in Chat/IM:
14** Clicking on resident names in Local Chat will open their Profile page
15** Clicking on resident names in a Group IM will open an individual IM
16
17* Added four texture constants for referencing in llSetLinkTexture in scripts:
18** TEXTURE_BLANK, TEXTURE_DEFAULT, TEXTURE_PLYWOOD and TEXTURE_TRANSPARENT
19** Note: Scripts using these constants will run in all Second Life viewers, however previous versions of the viewer will not be able to edit and recompile scripts using the new TEXTURE_BLANK constant; older versions trying to compile such a script will report "(XX,YY) : ERROR : Name not defined within scope."
20
21* Thread monitoring to catch freezes
22** A new thread monitor will detect when the viewer application frozen for a period greater than 10 seconds and possibly force a crash with detailed logs
23
24* Improved internationalization support:
25** Make 'System Default' language option work on Linux and Windows.
26** Make unicode system font support good on Linux
27
28* Improvements to Search
29** Search > Popular Places is replaced by a Search > Showcase tab that points to the website Showcase
30** Search > Places and Search > Groups use web-based search
31** Classified ads have a drop-down menu to indicate Mature or Not Mature content
32
33Changes:
34* VWR-4794: Basic voice lipsync for voice visualization
35* VWR-4204: Clicking on names in Chat/Group IM history should open Profile page or IM
36* VWR-463: Blank is a pre-defined texture in client, but not in LSL
37* Updated library version for openssl
38* New users are shown as a cloud rather than naked until they choose a gender.
39* Move "Set Window Size" options from File menu into Preferences > Graphics
40* Make clothing-still-downloading dialog into an ignorable alert dialog
41* Internationalize additional hard-coded viewer strings to a strings.xml file
42* Search > Popular Places is replaced by a Search > Showcase tab that points to the website Showcase
43* Convert Search > Places tab to use HTML search
44* Convert Search > Group tab to use HTML search
45* Search: Require Mature/Not Mature in Classifieds
46* Make strict GL debugging toggleable on-the-fly via Advanced menu > Rendering > Debug GL option - turns on extra rendering error checking and help reproduce crashes
47
48Fixes:
49* Fixed: VWR-104: Unused class LLVertexProgramGL should be removed
50* Fixed: VWR-2778: System skirt textures turn invisible on wearing
51* Fixed: VWR-2272: Fly button doesn't work while sitting
52* Fixed: VWR-2404: Lossless texture compression on small textures is not lossless
53* Fixed: VWR-5807: Wild rotations of linkset while using the editor in Local Ruler Mode via CTRL key
54* Fixed: VWR-6056: Animation viewer does not play animations on upload.
55* Fixed: VWR-6399: llMapDestination should still show teleport map -- Teleport / Map screen changes in 1.20 RC0 need to be undone
56* Fixed: VWR-4860: WindLight: Planar texturing renders incorrectly in 1.19.0 (79674)
57* Fixed: VWR-5963: LLImageGL::setClamp may affect random texture (making repeating textures on objects non-repeating)
58* Fixed: VWR-7061: Trivial UI grammar error in the title of the "Script Warning/Error" window
59* Fixed: VWR-6186: Second Life is leaking Objective-C objects at startup
60* Fixed: VWR-3598: Non-group owned objects appear to belong to the group of the last selected object, no matter the owner/group.
61* Fixed: SVC-1241: Dead code in lscript_execute.cpp
62* Fixed: VWR-4057: Multi-line chat display bug - first character in line missing
63* Fixed: VWR-3857: Script (LSL) editor shows non Latin 1 characters as square boxes
64* Fixed: VWR-2275: Linux 1.18.3 Won't Link
65* Fixed: VWR-3813: gtk_check_version() API changed to return const gchar * - causes gcc ERROR
66* Fixed: llrender.cpp export
67* Fixed: Create secondlife:///app/ URL to open my groups panel
68* Fixed: Create secondlife:///app/ URL to open create groups dialog
69* Fixed: Display a message if LLWebBrowserCtrl blocks a secondlife:///app/* url
70* Fixed: Abstract common glTexParameter calls
71* Fixed: Orientation Island HUD select language texture is wrong for English in 1.20
72* Fixed: Double-clicking border of communicate window makes window unrecoverable
73* Fixed: Command line parser bug parsing "--multiple true" at beginning of a command line.
74* Fixed: --loginuri is not being handled correctly
75* Fixed: Grid selection drop-down on login screen does not take priority over -loginuri when selection is first opened
76* Fixed: crash in LLMediaImplQuickTime::load
77* Fixed: crash on LLViewerParcelMedia::update
78* Fixed: Pop-up menu width should try to accomodate the longest menu item (within reason)
79* Fixed: VWR-1735: Directly interacting with a muted resident should unmute them
80* Fixed: VWR-2142: Parcel voice icon doesn't reflect disabled status if voice isn't used
81* Fixed: VWR-5853: Double-Clicking on vertical edge of Inventory/Gesture window destroys the floating window.
82* Fixed: VWR-2448: Snapshot Preview tool should respect 'Quiet Snapshots to Disk'
83* Fixed: Can't change values with debug settings floater
84* Fixed: Focus > Zoom button can't be re-selected
85* Fixed: Debug Permissions displays overlap
86* Fixed: Objects with no group tagging show group tags of previously clicked items
87* Fixed: stop bundling libexpat with the linux viewer
88* Partial Fix: Pasting multiline clipboard content into chat loses newlines
89
90Localization Fixes:
91* Fixed: VWR-7168: A typo in base (en-us) version of mime_types.xml
92* Fixed: VWR-7153: An typo in en-us version of alerts.xml file makes an <ignore> text of unlocalizable
93* Fixed: VWR-7087: Japanese "About Second Life..." file includes an invalid UTF-8 character
94
95Release Notes for Second Life 1.20(6) May 7th, 2008
96=====================================
97Changes:
98* Changed the reference in Group Information window > Notices tab to 14 days instead of 30
99* Removed menu option Advanced > Character > Show Collision Plane
100
101Fixes:
102* Fixed: VWR-6389: Runtime Library error after quitting Second Life
103* Fixed: VWR-4580: Property lines are visible through avatar, objects and through ground
104* Fixed: VWR-6896: Crash when selecting Advanced > Rendering > Info Displays > Lights (and other Info Displays)
105* Fixed: VWR-7042: Incorrect tooltip for "Use built-in web browser" option
106* Fixed: the spinners are broken in the snapshot UI when upload a snapshot
107* Fixed: Create tool's last 11 shapes are not the proper height ("sphere" looks like an "egg")
108* Fixed: Typographical error in Transfer permissions alert dialog
109* Fixed: Crash selecting Edit > Land Owners with Basic Shaders disabled
110* Fixed: crash on LLFloaterWorldMap::buildLandmarkIDLists
111* Fixed: 3dConnexion device does not default to enabled with 1.20 RC 5
112* Fixed: Settings in the Joystick Configuration window reset to defaults on each launch when a SpaceNavigator is connected
113
114Localization Fixes:
115* Fixed: XML resizing to repair truncated text in 1.20 localizations
116
1Release Notes for Second Life 1.20(5) May 1st, 2008 117Release Notes for Second Life 1.20(5) May 1st, 2008
2===================================== 118=====================================
3Changes: 119Changes:
@@ -219,3 +335,140 @@ Source changes:
219* Fixed: g++ 4 viewer compile issues 335* Fixed: g++ 4 viewer compile issues
220* Dead code removal createLegacyWearableFromAvatar 336* Dead code removal createLegacyWearableFromAvatar
221 337
338
339Release Notes for Second Life 1.19.0(4) February 28th, 2008
340=====================================
341New features and changes:
342* Voice
343** Voice Chat is now enabled by default to allow Residents to hear other Residents.
344** A microphone is required to speak to other Residents.
345** Push-to-Talk is the default mode for transmitting voice.
346** These settings can be modified via the Voice Chat tab of the Preferences dialog.
347
348* Age Verification:
349** The user interface for parcel and estate access has been clarified and improved.
350** Added the ability to restrict access to parcels and estates to age verified adults.
351** Removed the ability to *ban* access to Residents who have provided payment info or who have used payment info. We continue to support the ability to *allow* access to only those who have provided payment info.
352
353* Crash Reporter
354** The crash reporting mechanism has been improved. Following a crash, more useful information will be sent and reports should now take less than 10 seconds.
355
356* VWR-210: Voice Support on Linux (EXPERIMENTAL) - see README-linux-voice.txt
357
358* Other changes:
359** Change alert message that pops up when you set Busy
360** Add "Teleporting from SLURL to SLURL" to the chat history to provide quick and dirty "back" links
361** Print the name of the missing gesture in the error message
362** Remove "New Account..." and "Preferences" buttons from login screen for 1.19.0
363
364Fixes:
365* SVC-930: Prims set for sale - prices are incorrectly set when multiple prims taken to inventory and rezzed
366* SVC-1125: New Search: Beacons aren't shown when teleporting to regions with "Allow Direct Teleport" disabled
367* VWR-1125: Clicking Title Bar While Mouselook'd Repositions SL Window
368* VWR-1137: Inventory names out of sync after renaming via Properties window
369* VWR-1145: Unable To Connect help not available
370* VWR-1162: Land for sale includes L$1 parcels that are not actually for sale
371* VWR-1350: Color settings do not appear to be applied to LSL default text
372* VWR-1475: OpenJPEG always uploads single layer lossless images
373* VWR-1590: Keyboard changes inventory selection after right-click
374* VWR-1627: Classified metrics are reset to 0 when the ad is updated
375* VWR-1651: Add ability to open a partners profile whilst viewing an avatar's profile
376* VWR-1774: Some avatar positions result in no Z-axis arrow when editing attachments
377* VWR-1873: Typos in en-us locale file
378* VWR-1919: Remove texture UUID information from UI unless full-perm
379* VWR-2030: Avatar only turns half-way in Appearance Mode
380* VWR-2142: Parcel voice icon doesn't reflect disabled status if voice isn't used
381* VWR-2256: Mac updater directory permission issues
382* VWR-2367: Wrong handling of maximum length of Group Notice message
383* VWR-2404: lossless texture compression on small textures not lossless
384* VWR-2410: noise dot appear in chat window when clien running long with chatting.
385* VWR-2411: Possible crash in pipeline.cpp
386* VWR-2412: Possible crash drawpoolwater
387* VWR-2421: ATI Radeon HD 2900 XT + Second Life = "Couldn't match GPU to a class","Setting GPU Class to Class0"
388* VWR-2483: the macviewer.xcodeprj file doesn't create stripped binaries on Deployment or Universal
389* VWR-250: Preedit (composition) strings are shown poorly when typing Japanese text on Windows
390* VWR-2550: Scuplty vertex coordinates are size/256 meters too small on the positive faces
391* VWR-2614: gActiveChannelSpeakerMgr not deleted at end of program in viewer.cpp
392* VWR-2617: Adds LLSD support to flex/light/sculpt params for primitives
393* VWR-2652: Changes needed to compile viewer against lastest libopenjpeg2000
394* VWR-2684: Minor leak in floaters using layoutstacks
395* VWR-2722: Muting an object with pie menu only mutes the prim you select, not entire linkset
396* VWR-2847: Wrong hover text in Japanese UI
397* VWR-2854: Some sculpted prims render as balls on close zoom, which look fine in older clients
398* VWR-2867: Eyes rotate unnaturally around their X axis. Clockwise/Counter-Clockwise
399* VWR-289: URLs for video media streaming need to be URL-encoded or stream doesn't work
400* VWR-2959: Windows (Visual Studio) solution file refers to a non-existing project "build_all"
401* VWR-3088: Unchecking "Automatic Appearance Camera Movement" no longer has any effect
402* VWR-3206: OpenJPEG svn478 causes slviewer to crash
403* VWR-3428: Checking a users profile while editing a linked set causes viewer crash
404* VWR-3458: Mouse cursor background is opaque white instead of transparent on big endian systems
405* VWR-3558: llLoadURL cannot be muted
406* VWR-356: Move delete to the bottom of context menus, separated by spacer
407* VWR-3748: Builds fail on 1.18.6 RC if not using MOZLIB due to missing #if LL_LIBXUL_ENABLED in 3 places in indra/newview/llpanellogin.cpp
408* VWR-3948: Underlayers no longer removable by pie menu in Windlight, release candidates
409* VWR-412: Object editing arrows hidden but clickable on objects you can't edit.
410* dialogs have extra vertical space
411* Photo Album: name in Properties cut off some Japanese characters
412* New gestures do not appear active in inventory
413* Make parcel name in menu "look" active
414* "Wear" pie option shows up for many objects even if resident does not own and cannot wear them.
415* Textures on no-transfer objects can be transferred
416* Deleted gestures still work
417* Inventory description out of sync after renaming via Properties window
418* Show private estate tiles when World Map is zoomed out
419* Properties description not updated when preview description updated
420* Buying object contents broken
421* Improve window opening behavior, ensuring it is mostly on screen
422* No-modify objects can be modified through Open pane
423* Inventory names out of sync after renaming via Properties
424* Japanese IME mode should be set and postiion of any input windows fixed for non-Japanese fields
425* ctrl-shift-w doesn't work if no windows have focus
426* Avatar falling in place - Alliez Mysterio
427* Linux crash reporter does not run on next execution after forcing an infinite loop and forcefully exiting
428* hitting enter should immediately set the value of a field
429* Inventory Folder Loading state not clearly indicated
430* Add warning dialog to the Land Sale process to warn against selling land to Anyone
431* Legacy flossexception link needs to be fixed in source
432* make link from client log in window to "Forgot Password" page
433* Remove button under estate managers list enables after estate manager clicks in the list
434* Changing search field should cancel current selection
435* Estate tab within Tools / Region Estate has wrong settings for enable of Restrict Access upon initialization
436* llEscapeURL and llUnescapeURL caps output to 255 characters
437* XUI LoadFromXML function doesn't work
438* Sanitize floater sizing behavior when SL window is made very small
439* Animation won't stop if avatar teleports while animated
440* Can't paste name of object into View > Mute List > Mute object by name
441* pressing ctrl-F10 then Escape causes keyboard to be unresponsive
442* Make SL viewer updater show a progress bar so that people know how long to wait
443* Can't double-click on groups in profile after changing your active title
444* Getting multiple copies of texture dragged onto prim
445* blue dialog's 'next' widget steals focus
446* Audio should be encoded for upload at a 'good enough' quality rather than a user-selected bitrate
447* multiple preview windows open for a single texture/snapshot saved inside a note card
448* Enhance Viewer to support new Age Verification feature
449* Rename crash setting to cause crash logger to come up for all residents
450* Change crash logger "Remember this choice" function to default to on
451* Rework Ban tab of floater_about_land
452* Windows IME positioning fixed
453* Viewer crashes in assert when playing Sword Strike animation
454* Unable to set 'Group Access' for land that is also 'Public Access' (Was VWR-3667)
455* Disable QuickTime when the installed version is less than version with RTSP exploit
456* Korean viewer crashes on startup
457* Move fullscreen message from login screen to viewer prefs
458* linux client doesn't recognise that a viewer is already running (slurl crapout)
459* Search results window displays "s..." and "n..." instead of "searching..." and "none found"
460* QuickTime disabled message can not be ignored
461* Crash on login page when using Logitech LCD Keyboard
462* SEC-17 Ability to Access Sculpted Prim Textures from Database without owning actual sculpt texture, allowing for people to "steal" sculpts.
463* info window does not pop up when transitioning from a Havok1 to Havok4 region
464* Repoint Report Bug... Viewer link to Pjira
465* Upload Animation window: Button missing in Stopped window state
466
467Source changes:
468* Upgrade Win32 libvorbis to v1.2
469* VWR-2881: Bundled Mesa libs are not GPL compatible
470* upgrade in-tree Linux GL headers to Mesa 7.x
471* upgrade in-tree Win32 GL headers to version without SGI Free B license
472* Rebuild and/or update libraries to use statically linked libs.
473* Remove llfloaterhtmlhelp.cpp / h and floater_html_help.xml
474
diff --git a/linden/indra/newview/res/newViewRes.rc b/linden/indra/newview/res/newViewRes.rc
index 6254613..099d5dc 100644
--- a/linden/indra/newview/res/newViewRes.rc
+++ b/linden/indra/newview/res/newViewRes.rc
@@ -231,8 +231,8 @@ TOOLMEDIAOPEN CURSOR "toolmediaopen.cur"
231// 231//
232 232
233VS_VERSION_INFO VERSIONINFO 233VS_VERSION_INFO VERSIONINFO
234 FILEVERSION 1,19,1,4 234 FILEVERSION 1,20,6,86975
235 PRODUCTVERSION 1,19,1,4 235 PRODUCTVERSION 1,20,6,86975
236 FILEFLAGSMASK 0x3fL 236 FILEFLAGSMASK 0x3fL
237#ifdef _DEBUG 237#ifdef _DEBUG
238 FILEFLAGS 0x1L 238 FILEFLAGS 0x1L
@@ -249,12 +249,12 @@ BEGIN
249 BEGIN 249 BEGIN
250 VALUE "CompanyName", "Linden Lab" 250 VALUE "CompanyName", "Linden Lab"
251 VALUE "FileDescription", "Second Life" 251 VALUE "FileDescription", "Second Life"
252 VALUE "FileVersion", "1.19.1.4" 252 VALUE "FileVersion", "1.20.6.86975"
253 VALUE "InternalName", "Second Life" 253 VALUE "InternalName", "Second Life"
254 VALUE "LegalCopyright", "Copyright 2001-2008, Linden Research, Inc." 254 VALUE "LegalCopyright", "Copyright 2001-2008, Linden Research, Inc."
255 VALUE "OriginalFilename", "SecondLife.exe" 255 VALUE "OriginalFilename", "SecondLife.exe"
256 VALUE "ProductName", "Second Life" 256 VALUE "ProductName", "Second Life"
257 VALUE "ProductVersion", "1.19.1.4" 257 VALUE "ProductVersion", "1.20.6.86975"
258 END 258 END
259 END 259 END
260 BLOCK "VarFileInfo" 260 BLOCK "VarFileInfo"
diff --git a/linden/indra/newview/skins/textures/textures.xml b/linden/indra/newview/skins/textures/textures.xml
index 6e7553f..4dbbdf0 100644
--- a/linden/indra/newview/skins/textures/textures.xml
+++ b/linden/indra/newview/skins/textures/textures.xml
@@ -106,6 +106,7 @@
106 <button_anim_stop_selected.tga/> 106 <button_anim_stop_selected.tga/>
107 <crosshairs.tga/> 107 <crosshairs.tga/>
108 <direction_arrow.tga/> 108 <direction_arrow.tga/>
109 <cloud-particle.j2c use_mips="true"/>
109 <foot_shadow.j2c use_mips="true"/> 110 <foot_shadow.j2c use_mips="true"/>
110 111
111 <icon_auction.tga/> 112 <icon_auction.tga/>
@@ -121,7 +122,6 @@
121 <icon_groupnoticeinventory.tga/> 122 <icon_groupnoticeinventory.tga/>
122 <icon_lock.tga/> 123 <icon_lock.tga/>
123 <icon_place.tga/> 124 <icon_place.tga/>
124 <icon_popular.tga/>
125 <icon_top_pick.tga/> 125 <icon_top_pick.tga/>
126 126
127 <inv_folder_animation.tga/> 127 <inv_folder_animation.tga/>
@@ -179,7 +179,7 @@
179 <map_telehub.tga/> 179 <map_telehub.tga/>
180 <map_track_16.tga/> 180 <map_track_16.tga/>
181 <media_icon.tga file_name="icn_label_media.tga" /> 181 <media_icon.tga file_name="icn_label_media.tga" />
182 <music_icon.tga file_name="icn_lable_music.tga" /> 182 <music_icon.tga file_name="icn_label_music.tga" />
183 <noentrylines.j2c use_mips="true"/> 183 <noentrylines.j2c use_mips="true"/>
184 <noentrypasslines.j2c use_mips="true"/> 184 <noentrypasslines.j2c use_mips="true"/>
185 <notify_tip_icon.tga/> 185 <notify_tip_icon.tga/>
diff --git a/linden/indra/newview/skins/xui/de/floater_html.xml b/linden/indra/newview/skins/xui/de/floater_html.xml
index f5c69ce..7e97d4f 100644
--- a/linden/indra/newview/skins/xui/de/floater_html.xml
+++ b/linden/indra/newview/skins/xui/de/floater_html.xml
@@ -5,4 +5,7 @@
5 <button label="Zuhause" name="home_btn" /> 5 <button label="Zuhause" name="home_btn" />
6 <button label="Weiterleiten" name="forward_btn" /> 6 <button label="Weiterleiten" name="forward_btn" />
7 <button label="Los" name="go_btn" /> 7 <button label="Los" name="go_btn" />
8 <string name="home_page_url">
9 http://de.secondlife.com
10 </string>
8</floater> 11</floater>
diff --git a/linden/indra/newview/skins/xui/de/mime_types.xml b/linden/indra/newview/skins/xui/de/mime_types.xml
index d5153d0..03fd660 100644
--- a/linden/indra/newview/skins/xui/de/mime_types.xml
+++ b/linden/indra/newview/skins/xui/de/mime_types.xml
@@ -78,7 +78,7 @@
78 </label> 78 </label>
79 </mimetype> 79 </mimetype>
80 <mimetype name="image/*"> 80 <mimetype name="image/*">
81 <label label="image2_label"> 81 <label name="image2_label">
82 Bild 82 Bild
83 </label> 83 </label>
84 </mimetype> 84 </mimetype>
diff --git a/linden/indra/newview/skins/xui/de/panel_group_invite.xml b/linden/indra/newview/skins/xui/de/panel_group_invite.xml
index e762567..0ad1aeb 100644
--- a/linden/indra/newview/skins/xui/de/panel_group_invite.xml
+++ b/linden/indra/newview/skins/xui/de/panel_group_invite.xml
@@ -1,10 +1,5 @@
1<?xml version="1.0" encoding="utf-8" standalone="yes" ?> 1<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
2<panel label="Mitglied einladen" name="invite_panel"> 2<panel label="Mitglied einladen" name="invite_panel">
3 <text>
4 Sie können mehrere Einwohner zu Ihrer
5Gruppe einladen. Klicken Sie auf
6&apos;Personenauswahl öffnen&apos;.
7 </text>
8 <text name="help_text"> 3 <text name="help_text">
9 Sie können mehrere Einwohner zu Ihrer 4 Sie können mehrere Einwohner zu Ihrer
10Gruppe einladen. Klicken Sie auf 5Gruppe einladen. Klicken Sie auf
diff --git a/linden/indra/newview/skins/xui/de/panel_group_notices.xml b/linden/indra/newview/skins/xui/de/panel_group_notices.xml
index 0488851..9a819eb 100644
--- a/linden/indra/newview/skins/xui/de/panel_group_notices.xml
+++ b/linden/indra/newview/skins/xui/de/panel_group_notices.xml
@@ -16,7 +16,7 @@ gesendet. Mitteilungen können unter
16 Gruppenmitteilungsarchiv 16 Gruppenmitteilungsarchiv
17 </text> 17 </text>
18 <text name="lbl2"> 18 <text name="lbl2">
19 Mitteilungen werden 30 Tage lang aufbewahrt. Klicken 19 Mitteilungen werden 14 Tage lang aufbewahrt. Klicken
20Sie auf eine Mitteilung, um sie anzuzeigen. Klicken Sie 20Sie auf eine Mitteilung, um sie anzuzeigen. Klicken Sie
21auf &apos;Aktualisieren&apos;, um neue Mitteilungen zu suchen. 21auf &apos;Aktualisieren&apos;, um neue Mitteilungen zu suchen.
22 </text> 22 </text>
diff --git a/linden/indra/newview/skins/xui/de/panel_preferences_graphics1.xml b/linden/indra/newview/skins/xui/de/panel_preferences_graphics1.xml
index ff48982..c251a50 100644
--- a/linden/indra/newview/skins/xui/de/panel_preferences_graphics1.xml
+++ b/linden/indra/newview/skins/xui/de/panel_preferences_graphics1.xml
@@ -17,6 +17,8 @@
17 <text_editor name="FullScreenInfo" width="480"> 17 <text_editor name="FullScreenInfo" width="480">
18 Wenn deaktiviert, schaltet die Anzeige bei Anmeldung auf Vollbild um. 18 Wenn deaktiviert, schaltet die Anzeige bei Anmeldung auf Vollbild um.
19 </text_editor> 19 </text_editor>
20 <combo_box name="windowsize combo" left="115">
21 </combo_box>
20 <text name="DisplayResLabel" width="100"> 22 <text name="DisplayResLabel" width="100">
21 Anzeigeauflösung: 23 Anzeigeauflösung:
22 </text> 24 </text>
diff --git a/linden/indra/newview/skins/xui/de/panel_preferences_web.xml b/linden/indra/newview/skins/xui/de/panel_preferences_web.xml
index b746097..af493e6 100644
--- a/linden/indra/newview/skins/xui/de/panel_preferences_web.xml
+++ b/linden/indra/newview/skins/xui/de/panel_preferences_web.xml
@@ -1,8 +1,7 @@
1<?xml version="1.0" encoding="utf-8" standalone="yes" ?> 1<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
2<panel label="Web" name="web"> 2<panel label="Web" name="web">
3 <radio_group name="use_external_browser" 3 <radio_group name="use_external_browser">
4 tool_tip="Externen Browser für Hilfe, Weblinks usw. verwenden. Im Vollbildmodus nicht empfohlen."> 4 <radio_item name="external" tool_tip="Externen Browser für Hilfe, Weblinks usw. verwenden. Im Vollbildmodus nicht empfohlen.">
5 <radio_item name="external">
6 Externen Browser verwenden (Firefox, Safari, Internet Explorer) 5 Externen Browser verwenden (Firefox, Safari, Internet Explorer)
7 </radio_item> 6 </radio_item>
8 <radio_item name="internal"> 7 <radio_item name="internal">
diff --git a/linden/indra/newview/skins/xui/en-us/alerts.xml b/linden/indra/newview/skins/xui/en-us/alerts.xml
index 39d1728..e3d0dbf 100644
--- a/linden/indra/newview/skins/xui/en-us/alerts.xml
+++ b/linden/indra/newview/skins/xui/en-us/alerts.xml
@@ -1032,7 +1032,7 @@ If you continue to have problems, please visit: http://www.secondlife.com/suppor
1032MINSPECS 1032MINSPECS
1033Do you wish to visit [_URL] for more information? 1033Do you wish to visit [_URL] for more information?
1034 </message> 1034 </message>
1035 <ignore message="ignore"> 1035 <ignore name="ignore">
1036 Ignore unsupported hardware 1036 Ignore unsupported hardware
1037 </ignore> 1037 </ignore>
1038 <option name="Yes"> 1038 <option name="Yes">
@@ -1319,8 +1319,7 @@ really want to offer this item?
1319 </alert> 1319 </alert>
1320 <alert modal="true" name="NoItems"> 1320 <alert modal="true" name="NoItems">
1321 <message name="message"> 1321 <message name="message">
1322 You do not have permission to transfer 1322 You do not have permission to transfer the selected items.
1323 the selected items.
1324 </message> 1323 </message>
1325 </alert> 1324 </alert>
1326 <alert modal="true" name="CannotCopyCountItems"> 1325 <alert modal="true" name="CannotCopyCountItems">
@@ -2465,10 +2464,12 @@ You have been moved into a nearby region.
2465 </alert> 2464 </alert>
2466 <alert modal="true" name="ClothingLoading"> 2465 <alert modal="true" name="ClothingLoading">
2467 <message name="message"> 2466 <message name="message">
2468 Your clothing is still downloading. 2467 Your clothing is still downloading.
2469You can use the world normally, and other users 2468You can use [SECOND_LIFE] normally and other users will see you correctly.
2470will see you correctly.
2471 </message> 2469 </message>
2470 <ignore name="ignore">
2471 When clothing is taking a long time to download
2472 </ignore>
2472 </alert> 2473 </alert>
2473 <alert modal="true" name="FirstRun"> 2474 <alert modal="true" name="FirstRun">
2474 <message name="message"> 2475 <message name="message">
@@ -3547,6 +3548,34 @@ Publish this classified now for L$[AMOUNT]?
3547 Cancel 3548 Cancel
3548 </option> 3549 </option>
3549 </alert> 3550 </alert>
3551 <alert name="SetClassifiedMature">
3552 <message name="message">
3553Does this classified contain Mature content?
3554 </message>
3555 <option name="Mature">
3556 Yes
3557 </option>
3558 <option name="Not Mature">
3559 No
3560 </option>
3561 <option name="Cancel">
3562 Cancel
3563 </option>
3564 </alert>
3565 <alert name="SetGroupMature">
3566 <message name="message">
3567Does this group contain Mature content?
3568 </message>
3569 <option name="Mature">
3570 Yes
3571 </option>
3572 <option name="Not Mature">
3573 No
3574 </option>
3575 <option name="Cancel">
3576 Cancel
3577 </option>
3578 </alert>
3550 <alert name="ConfirmRestart" title="Confirm restart"> 3579 <alert name="ConfirmRestart" title="Confirm restart">
3551 <message name="message"> 3580 <message name="message">
3552 Do you really want to restart this region in 2 minutes? 3581 Do you really want to restart this region in 2 minutes?
@@ -4951,5 +4980,10 @@ Would you like to visit the Second Life website to set this up?
4951 https://secondlife.com/account/ 4980 https://secondlife.com/account/
4952 </url> 4981 </url>
4953 </alert> 4982 </alert>
4983 <alert modal="true" name="MissingString">
4984 <message name="message">
4985 The string [STRING_NAME] is missing from strings.xml
4986 </message>
4987 </alert>
4954</alerts> 4988</alerts>
4955 4989
diff --git a/linden/indra/newview/skins/xui/en-us/floater_directory.xml b/linden/indra/newview/skins/xui/en-us/floater_directory.xml
index 7714d67..43f255c 100644
--- a/linden/indra/newview/skins/xui/en-us/floater_directory.xml
+++ b/linden/indra/newview/skins/xui/en-us/floater_directory.xml
@@ -65,7 +65,8 @@
65 <string name="redirect_404_url"> 65 <string name="redirect_404_url">
66 http://secondlife.com/app/search/notfound.html 66 http://secondlife.com/app/search/notfound.html
67 </string> 67 </string>
68 </panel> 68 <string name="default_search_page">"http://secondlife.com/app/search/index.php?"</string>
69 </panel>
69 <panel border="true" bottom="-549" follows="left|top|right|bottom" height="533" 70 <panel border="true" bottom="-549" follows="left|top|right|bottom" height="533"
70 label="Classifieds" left="1" left_delta="68" mouse_opaque="false" 71 label="Classifieds" left="1" left_delta="68" mouse_opaque="false"
71 name="classified_panel" width="778"> 72 name="classified_panel" width="778">
@@ -272,50 +273,37 @@
272 mouse_opaque="true" name="&lt; Prev" right="258" width="80" /> 273 mouse_opaque="true" name="&lt; Prev" right="258" width="80" />
273 </panel> 274 </panel>
274 <panel border="true" bottom="-549" follows="left|top|right|bottom" height="533" 275 <panel border="true" bottom="-549" follows="left|top|right|bottom" height="533"
275 label="Popular Places" left="1" mouse_opaque="false" name="popular_panel" 276 label="Showcase" left="1" mouse_opaque="false" name="showcase_panel"
276 width="778"> 277 width="778">
277 <string name="searching_text"> 278 <string name="searching_text">Searching...</string>
278 Searching... 279 <string name="not_found_text">None Found.</string>
279 </string> 280 <button bottom="-30" follows="top|left" font="SansSerifSmall" height="20"
280 <string name="not_found_text"> 281 label="Back"
281 None Found. 282 left="10"
282 </string> 283 name="back_btn" width="70" />
283 <button bottom="-533" follows="left|bottom" font="SansSerif" halign="center" 284 <button bottom_delta="0" follows="top|left" font="SansSerifSmall" height="20"
284 height="20" label="Next &gt;" label_selected="Next &gt;" 285 label="Forward" left_delta="75"
285 mouse_opaque="true" name="Next &gt;" right="344" width="80" /> 286 name="forward_btn" width="70" />
286 <button bottom_delta="0" follows="left|bottom" font="SansSerif" halign="center" 287 <!-- No mature content checkbox, showcase is all PG -->
287 height="20" label="&lt; Prev" label_selected="&lt; Prev" 288 <web_browser name="showcase_browser"
288 mouse_opaque="true" name="&lt; Prev" right="258" width="80" /> 289 bottom="25"
289 <check_box bottom="-22" control_name="FindPlacesPictures" follows="left|top" 290 follows="top|left|bottom|right"
290 font="SansSerifSmall" height="16" initial_value="true" 291 font="SansSerifSmall"
291 label="Only show places with pictures" left="24" mouse_opaque="true" 292 left="10"
292 name="incpictures" width="200" /> 293 right="-10"
293 <check_box bottom_delta="-16" control_name="ShowMatureSims" follows="left|top" 294 top="-40" />
294 font="SansSerifSmall" height="16" initial_value="false" 295 <text bottom="5"
295 label="Include parcels with Restricted Content" left="24" 296 follows="bottom|left"
296 mouse_opaque="true" name="incmature" width="204" /> 297 halign="left"
297 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 298 left="10"
298 bottom="-38" drop_shadow_visible="true" follows="right|top" 299 width="150"
299 font="SansSerifSmall" h_pad="0" halign="left" height="32" left_delta="326" 300 name="status_text"
300 mouse_opaque="true" 301 height="16" />
301 name="These are the most popular places in the world, as measured by traffic, the amount of time people spend there." 302 <string name="loading_text">Loading...</string>
302 v_pad="0" width="406"> 303 <string name="done_text">Done</string>
303 These are the most popular places in the world, as measured by traffic, 304 <string name="redirect_404_url">http://secondlife.com/app/search/notfound.html</string>
304the amount of time people spend there. 305 <string name="default_search_page">"http://secondlife.com/app/showcase/index.php?"</string>
305 </text> 306 </panel>
306 <scroll_list background_visible="true" bottom="-513" column_padding="0" draw_border="true" draw_heading="true"
307 follows="left|top|right|bottom" height="464" left="4" mouse_opaque="true"
308 multi_select="false" name="results" search_column="2" width="339">
309 <column label="" name="icon" width="24" />
310 <column label="" name="type" width="-1" />
311 <column dynamicwidth="true" label="Name" name="name" />
312 <column label="Traffic" name="dwell" width="70" />
313 </scroll_list>
314 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
315 bottom_delta="-20" drop_shadow_visible="true" follows="left|bottom"
316 font="SansSerifSmall" h_pad="0" halign="left" height="16" left="4"
317 mouse_opaque="true" name="result_text" v_pad="0" width="328" />
318 </panel>
319 <panel border="true" bottom="-549" follows="left|top|right|bottom" height="533" 307 <panel border="true" bottom="-549" follows="left|top|right|bottom" height="533"
320 label="Land Sales" left="1" mouse_opaque="false" name="land_sales_panel" 308 label="Land Sales" left="1" mouse_opaque="false" name="land_sales_panel"
321 width="778"> 309 width="778">
@@ -397,93 +385,72 @@ To buy direct, visit the land and click on the place name in the title bar.
397 font="SansSerifSmall" h_pad="0" halign="left" height="16" left="4" 385 font="SansSerifSmall" h_pad="0" halign="left" height="16" left="4"
398 mouse_opaque="true" name="result_text" v_pad="0" width="328" /> 386 mouse_opaque="true" name="result_text" v_pad="0" width="328" />
399 </panel> 387 </panel>
400 <panel border="true" bottom="-549" follows="left|top|right|bottom" height="533" 388 <panel border="true" bottom="-549" follows="left|top|right|bottom" height="533"
401 label="Places" left="1" mouse_opaque="false" name="places_panel" 389 label="Places" left="1" mouse_opaque="false"
390 name="places_panel"
402 width="778"> 391 width="778">
403 <string name="searching_text"> 392 <string name="searching_text">Searching...</string>
404 Searching... 393 <string name="not_found_text">None Found.</string>
405 </string> 394 <button bottom="-30" follows="top|left" font="SansSerifSmall" height="20"
406 <string name="not_found_text"> 395 label="Back"
407 None Found. 396 left="10"
408 </string> 397 name="back_btn" width="70" />
409 <button bottom="-533" follows="left|bottom" font="SansSerif" halign="center" 398 <button bottom_delta="0" follows="top|left" font="SansSerifSmall" height="20"
410 height="20" label="Next &gt;" label_selected="Next &gt;" 399 label="Forward" left_delta="75"
411 mouse_opaque="true" name="Next &gt;" right="344" width="80" /> 400 name="forward_btn" width="70" />
412 <button bottom_delta="0" follows="left|bottom" font="SansSerif" halign="center" 401 <line_editor bevel_style="in"
413 height="20" label="&lt; Prev" label_selected="&lt; Prev" 402 border_style="line"
414 mouse_opaque="true" name="&lt; Prev" right="258" width="80" /> 403 border_thickness="1"
415 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 404 bottom_delta="0"
416 bottom="-24" drop_shadow_visible="true" follows="left|top" font="SansSerif" 405 enabled="true"
417 h_pad="0" halign="left" height="16" left="4" mouse_opaque="true" 406 follows="top|left|right"
418 name="find" v_pad="0" width="50"> 407 font="SansSerif"
419 Find: 408 handle_edit_keys_directly="false"
420 </text> 409 commit_on_focus_lost="false"
421 <line_editor bevel_style="in" border_style="line" border_thickness="1" bottom="-24" 410 height="20"
422 follows="left|top" font="SansSerif" height="18" left_delta="38" 411 hidden="false"
423 max_length="63" mouse_opaque="true" name="name" width="128" /> 412 label="Search"
424 <check_box bottom_delta="-18" control_name="ShowMatureSims" follows="left|top" 413 left_delta="80"
414 width="180"
415 max_length="254"
416 mouse_opaque="true"
417 name="search_editor"
418 select_all_on_focus_received="false"
419 select_on_focus="false"
420 tab_group="1"
421 tool_tip="Search Second Life" />
422 <button follows="top|right" font="SansSerif" height="20"
423 label="Search"
424 left_delta="185"
425 bottom_delta="0"
426 name="search_btn" width="70" />
427 <check_box bottom_delta="0"
428 control_name="ShowMatureFindAll" follows="right|top"
425 font="SansSerifSmall" height="16" initial_value="false" 429 font="SansSerifSmall" height="16" initial_value="false"
426 label="Include parcels with Mature content" left_delta="0" 430 label="Include Mature content"
427 mouse_opaque="true" name="incmature" width="204" /> 431 left_delta="133"
428 <combo_box allow_text_entry="false" bottom="-24" follows="left|top" height="18" left="182" 432 name="mature_check"
429 max_chars="20" mouse_opaque="true" name="Category" width="128"> 433 width="156" />
430 <combo_item name="AnyCategory" value="any"> 434 <web_browser name="places_browser"
431 Any Category 435 bottom="25"
432 </combo_item> 436 follows="top|left|bottom|right"
433 <combo_item name="LindenLocation" value="linden"> 437 font="SansSerifSmall"
434 Linden Location 438 left="10"
435 </combo_item> 439 right="-10"
436 <combo_item name="Adult" value="adult"> 440 top="-40" />
437 Adult 441 <text bottom="5"
438 </combo_item> 442 follows="bottom|left"
439 <combo_item name="Arts&amp;Culture" value="arts"> 443 halign="left"
440 Arts &amp; Culture 444 left="10"
441 </combo_item> 445 width="150"
442 <combo_item name="Business" value="store"> 446 name="status_text"
443 Business 447 height="16" />
444 </combo_item> 448 <string name="loading_text">Loading...</string>
445 <combo_item name="Educational" value="educational"> 449 <string name="done_text">Done</string>
446 Educational 450 <string name="redirect_404_url">http://secondlife.com/app/search/notfound.html</string>
447 </combo_item> 451 <string name="default_search_page">"http://secondlife.com/app/search/index_places.php?"</string>
448 <combo_item name="Gaming" value="game"> 452 </panel>
449 Gaming 453 <panel border="true" bottom="-549" follows="left|top|right|bottom" height="533"
450 </combo_item>
451 <combo_item name="Hangout" value="gather">
452 Hangout
453 </combo_item>
454 <combo_item name="NewcomerFriendly" value="newcomer">
455 Newcomer Friendly
456 </combo_item>
457 <combo_item name="Parks&amp;Nature" value="park">
458 Parks &amp; Nature
459 </combo_item>
460 <combo_item name="Residential" value="home">
461 Residential
462 </combo_item>
463 <combo_item name="Shopping" value="shopping">
464 Shopping
465 </combo_item>
466 <combo_item name="Other" value="other">
467 Other
468 </combo_item>
469 </combo_box>
470 <button bottom="-26" follows="left|top" font="SansSerif" halign="center" height="20"
471 label="Search" label_selected="Search" left_delta="136" mouse_opaque="true"
472 name="Search" width="70" />
473 <scroll_list background_visible="true" bottom="-513" column_padding="0" draw_border="true"
474 draw_heading="true" follows="left|top|right|bottom" height="464" left="4" mouse_opaque="true"
475 multi_select="false" name="results" search_column="2" width="339">
476 <column label="" name="icon" width="24" />
477 <column label="" name="type" width="-1" />
478 <column dynamicwidth="true" label="Name" name="name" />
479 <column label="Traffic" name="dwell" width="75" />
480 </scroll_list>
481 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
482 bottom_delta="-20" drop_shadow_visible="true" follows="left|bottom"
483 font="SansSerifSmall" h_pad="0" halign="left" height="16" left="4"
484 mouse_opaque="true" name="result_text" v_pad="0" width="328" />
485 </panel>
486 <panel border="true" bottom="-549" follows="left|top|right|bottom" height="533"
487 label="People" left="1" mouse_opaque="false" name="people_panel" 454 label="People" left="1" mouse_opaque="false" name="people_panel"
488 width="778"> 455 width="778">
489 <string name="searching_text"> 456 <string name="searching_text">
@@ -495,128 +462,99 @@ To buy direct, visit the land and click on the place name in the title bar.
495 <button bottom="-533" follows="left|bottom" font="SansSerif" halign="center" 462 <button bottom="-533" follows="left|bottom" font="SansSerif" halign="center"
496 height="20" label="Next &gt;" label_selected="Next &gt;" 463 height="20" label="Next &gt;" label_selected="Next &gt;"
497 mouse_opaque="true" name="Next &gt;" right="330" width="80" /> 464 mouse_opaque="true" name="Next &gt;" right="330" width="80" />
498 <button bottom_delta="0" follows="left|bottom" font="SansSerif" halign="center" 465 <button bottom_delta="0" follows="left|bottom" font="SansSerif" halign="center"
499 height="20" label="&lt; Prev" label_selected="&lt; Prev" 466 height="20" label="&lt; Prev" label_selected="&lt; Prev"
500 mouse_opaque="true" name="&lt; Prev" right="244" width="80" /> 467 mouse_opaque="true" name="&lt; Prev" right="244" width="80" />
501 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 468 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
502 bottom="-24" drop_shadow_visible="true" follows="left|top" font="SansSerif" 469 bottom="-24" drop_shadow_visible="true" follows="left|top" font="SansSerif"
503 h_pad="0" halign="left" height="16" left="4" mouse_opaque="true" 470 h_pad="0" halign="left" height="16" left="4" mouse_opaque="true"
504 name="find" v_pad="0" width="50"> 471 name="find" v_pad="0" width="50">
505 Find: 472 Find:
506 </text> 473 </text>
507 <line_editor bevel_style="in" border_style="line" border_thickness="1" bottom="-24" 474 <line_editor bevel_style="in" border_style="line" border_thickness="1" bottom="-24"
508 follows="left|top" font="SansSerif" height="18" left_delta="38" 475 follows="left|top" font="SansSerif" height="18" left_delta="38"
509 max_length="63" mouse_opaque="true" name="name" width="200" /> 476 max_length="63" mouse_opaque="true" name="name" width="200" />
510 <button bottom="-26" follows="left|top" font="SansSerif" halign="center" height="20" 477 <button bottom="-26" follows="left|top" font="SansSerif" halign="center" height="20"
511 label="Search" label_selected="Search" left_delta="210" mouse_opaque="true" 478 label="Search" label_selected="Search" left_delta="210" mouse_opaque="true"
512 name="Search" width="70" /> 479 name="Search" width="70" />
513 <scroll_list background_visible="true" bottom="-513" column_padding="0" draw_border="true" draw_heading="true" 480 <scroll_list background_visible="false" bottom="-513" column_padding="0" draw_border="true"
481 draw_heading="true"
514 follows="left|top|right|bottom" height="464" left="4" mouse_opaque="true" 482 follows="left|top|right|bottom" height="464" left="4" mouse_opaque="true"
515 multi_select="false" name="results" search_column="2" width="326"> 483 multi_select="false" name="results" search_column="2" width="326">
516 <column label="" name="icon" width="24" /> 484 <column label="" name="icon" width="24" />
517 <column label="" name="type" width="-1" /> 485 <column label="" name="type" width="-1" />
518 <column label="Name" name="name" width="274" /> 486 <column label="Name" name="name" width="274" />
519 </scroll_list> 487 </scroll_list>
520 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 488 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
521 bottom_delta="-20" drop_shadow_visible="true" follows="left|bottom" 489 bottom_delta="-20" drop_shadow_visible="true" follows="left|bottom"
522 font="SansSerifSmall" h_pad="0" halign="left" height="16" left="4" 490 font="SansSerifSmall" h_pad="0" halign="left" height="16" left="4"
523 mouse_opaque="true" name="result_text" v_pad="0" width="328" /> 491 mouse_opaque="true" name="result_text" v_pad="0" width="328" />
524 </panel> 492 </panel>
525 <panel border="true" bottom="-549" follows="left|top|right|bottom" height="533" 493 <panel border="true" bottom="-549" follows="left|top|right|bottom" height="533"
526 label="Groups" left="1" mouse_opaque="false" name="groups_panel" 494 label="Groups" left="1" mouse_opaque="false"
495 name="groups_panel"
527 width="778"> 496 width="778">
528 <string name="searching_text"> 497 <string name="searching_text">Searching...</string>
529 Searching... 498 <string name="not_found_text">None Found.</string>
530 </string> 499 <button bottom="-30" follows="top|left" font="SansSerifSmall" height="20"
531 <string name="not_found_text"> 500 label="Back"
532 None Found. 501 left="10"
533 </string> 502 name="back_btn" width="70" />
534 <button bottom="-533" follows="left|bottom" font="SansSerif" halign="center" 503 <button bottom_delta="0" follows="top|left" font="SansSerifSmall" height="20"
535 height="20" label="Next &gt;" label_selected="Next &gt;" 504 label="Forward" left_delta="75"
536 mouse_opaque="true" name="Next &gt;" right="344" width="80" /> 505 name="forward_btn" width="70" />
537 <button bottom_delta="0" follows="left|bottom" font="SansSerif" halign="center" 506 <line_editor bevel_style="in"
538 height="20" label="&lt; Prev" label_selected="&lt; Prev" 507 border_style="line"
539 mouse_opaque="true" name="&lt; Prev" right="258" width="80" /> 508 border_thickness="1"
540 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 509 bottom_delta="0"
541 bottom="-24" drop_shadow_visible="true" follows="left|top" font="SansSerif" 510 enabled="true"
542 h_pad="0" halign="left" height="16" left="4" mouse_opaque="true" 511 follows="top|left|right"
543 name="find" v_pad="0" width="50"> 512 font="SansSerif"
544 Find: 513 handle_edit_keys_directly="false"
545 </text> 514 commit_on_focus_lost="false"
546 <line_editor bevel_style="in" border_style="line" border_thickness="1" bottom="-24" 515 height="20"
547 follows="left|top" font="SansSerif" height="18" left_delta="38" 516 hidden="false"
548 max_length="63" mouse_opaque="true" name="name" width="200" /> 517 label="Search"
549 <button bottom="-26" follows="left|top" font="SansSerif" halign="center" height="20" 518 left_delta="80"
550 label="Search" label_selected="Search" left_delta="210" mouse_opaque="true" 519 width="180"
551 name="Search" width="70" /> 520 max_length="254"
552 <check_box bottom_delta="-16" control_name="ShowMatureGroups" follows="left|top" 521 mouse_opaque="true"
522 name="search_editor"
523 select_all_on_focus_received="false"
524 select_on_focus="false"
525 tab_group="1"
526 tool_tip="Search Second Life" />
527 <button follows="top|right" font="SansSerif" height="20"
528 label="Search"
529 left_delta="185"
530 bottom_delta="0"
531 name="search_btn" width="70" />
532 <check_box bottom_delta="0"
533 control_name="ShowMatureFindAll" follows="right|top"
553 font="SansSerifSmall" height="16" initial_value="false" 534 font="SansSerifSmall" height="16" initial_value="false"
554 label="Include Mature groups" left="42" mouse_opaque="true" 535 label="Include Mature content"
555 name="incmature" width="204" /> 536 left_delta="133"
556 <scroll_list background_visible="true" bottom="-513" column_padding="0" draw_border="true" draw_heading="true" 537 name="mature_check"
557 follows="left|top|right|bottom" height="464" left="4" mouse_opaque="true" 538 width="156" />
558 multi_select="false" name="results" search_column="2" width="339"> 539 <web_browser name="groups_browser"
559 <column label="" name="icon" sort="score" sort_ascending="false" width="24" /> 540 bottom="25"
560 <column label="" name="type" width="-1" /> 541 follows="top|left|bottom|right"
561 <column dynamicwidth="true" label="Name" name="name" /> 542 font="SansSerifSmall"
562 <column halign="left" label="Members" name="members" sort_ascending="false" width="100" /> 543 left="10"
563 <column label="" name="score" width="-1" /> 544 right="-10"
564 </scroll_list> 545 top="-40" />
565 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 546 <text bottom="5"
566 bottom_delta="-20" drop_shadow_visible="true" follows="left|bottom" 547 follows="bottom|left"
567 font="SansSerifSmall" h_pad="0" halign="left" height="16" left="4" 548 halign="left"
568 mouse_opaque="true" name="result_text" v_pad="0" width="328" /> 549 left="10"
569 </panel> 550 width="150"
570 <panel border="true" bottom="-549" follows="left|top|right|bottom" height="533" 551 name="status_text"
571 label="All (old)" left="1" mouse_opaque="false" name="find_all_old_panel" 552 height="16" />
572 width="778"> 553 <string name="loading_text">Loading...</string>
573 <string name="searching_text"> 554 <string name="done_text">Done</string>
574 Searching... 555 <string name="redirect_404_url">http://secondlife.com/app/search/notfound.html</string>
575 </string> 556 <string name="default_search_page">"http://secondlife.com/app/search/index_groups.php?"</string>
576 <string name="not_found_text"> 557 </panel>
577 None Found.
578 </string>
579 <button bottom="-533" follows="left|bottom" font="SansSerif" halign="center"
580 height="20" label="&lt; Prev" label_selected="&lt; Prev" left="80"
581 mouse_opaque="true" name="&lt; Prev" width="60" />
582 <button bottom="-533" follows="left|bottom" font="SansSerif" halign="center"
583 height="20" label="Next &gt;" label_selected="Next &gt;"
584 mouse_opaque="true" name="Next &gt;" width="60" />
585 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
586 bottom="-24" drop_shadow_visible="true" follows="left|top" font="SansSerif"
587 h_pad="0" halign="left" height="16" left="4" mouse_opaque="true"
588 name="find" v_pad="0" width="50">
589 Find:
590 </text>
591 <line_editor bevel_style="in" border_style="line" border_thickness="1" bottom="-24"
592 follows="left|top" font="SansSerif" height="18" left_delta="38"
593 max_length="63" mouse_opaque="true" name="name" width="128" />
594 <button bottom="-26" follows="left|top" font="SansSerif" halign="center" height="20"
595 label="Search" label_selected="Search" left_delta="136" mouse_opaque="true"
596 name="Search" width="70" />
597 <check_box bottom="-22" control_name="ShowMatureFindAll" follows="left|top"
598 font="SansSerifSmall" height="16" initial_value="false"
599 label="Include Mature content" left_delta="78" mouse_opaque="true"
600 name="incmature" width="156" />
601 <scroll_list background_visible="true" bottom="-513" column_padding="0" draw_border="true" draw_heading="false"
602 follows="left|top|right|bottom" height="464" left="4" mouse_opaque="true"
603 multi_select="false" name="results" search_column="1" width="339">
604 <column label="" name="icon" width="24" />
605 <column label="Name" name="name" width="235" />
606 <column label="Price" name="price" width="90" />
607 <column label="Time (PT)" name="date" width="90" />
608 <column label="Time" name="time" width="-1" />
609 <column label="Traffic" name="dwell" width="90" />
610 <column label="Area" name="area" width="90" />
611 <column label="L$/sq.m" name="per_meter" width="90" />
612 <column label="Online" name="online" width="90" />
613 <column label="Members" name="members" width="90" />
614 </scroll_list>
615 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
616 bottom_delta="-20" drop_shadow_visible="true" follows="left|bottom"
617 font="SansSerifSmall" h_pad="0" halign="left" height="16" left="4"
618 mouse_opaque="true" name="result_text" v_pad="0" width="328" />
619 </panel>
620 </tab_container> 558 </tab_container>
621 <panel bottom="-560" follows="right|top" height="470" left="340" 559 <panel bottom="-560" follows="right|top" height="470" left="340"
622 name="classified_details_panel" width="440" /> 560 name="classified_details_panel" width="440" />
diff --git a/linden/indra/newview/skins/xui/en-us/floater_im.xml b/linden/indra/newview/skins/xui/en-us/floater_im.xml
index caf54e3..11c839c 100644
--- a/linden/indra/newview/skins/xui/en-us/floater_im.xml
+++ b/linden/indra/newview/skins/xui/en-us/floater_im.xml
@@ -16,6 +16,10 @@
16 <string name="invite_message"> 16 <string name="invite_message">
17 Click the [BUTTON NAME] button to accept/connect to this voice chat. 17 Click the [BUTTON NAME] button to accept/connect to this voice chat.
18 </string> 18 </string>
19 <string name="muted_message">
20 [FIRST] [LAST] is muted.
21 </string>
22
19 <string name="generic_request_error"> 23 <string name="generic_request_error">
20 Error making request, please try again later. 24 Error making request, please try again later.
21 </string> 25 </string>
diff --git a/linden/indra/newview/skins/xui/en-us/floater_joystick.xml b/linden/indra/newview/skins/xui/en-us/floater_joystick.xml
index 18f39dd..126bc7b 100644
--- a/linden/indra/newview/skins/xui/en-us/floater_joystick.xml
+++ b/linden/indra/newview/skins/xui/en-us/floater_joystick.xml
@@ -67,7 +67,7 @@
67 <text bottom="-294" left="20" width="94" halign="right" name="YDeadZone">Y Dead Zone</text> 67 <text bottom="-294" left="20" width="94" halign="right" name="YDeadZone">Y Dead Zone</text>
68 <spinner bottom="-294" left="125" width="56" label_width="0" control_name="AvatarAxisDeadZone2" name="AvatarAxisDeadZone2" decimal_digits="2" increment="0.01" min_val="0" max_val="1"/> 68 <spinner bottom="-294" left="125" width="56" label_width="0" control_name="AvatarAxisDeadZone2" name="AvatarAxisDeadZone2" decimal_digits="2" increment="0.01" min_val="0" max_val="1"/>
69 <spinner bottom="-294" left="195" width="56" label_width="0" control_name="BuildAxisDeadZone2" name="BuildAxisDeadZone2" decimal_digits="2" increment="0.01" min_val="0" max_val="1"/> 69 <spinner bottom="-294" left="195" width="56" label_width="0" control_name="BuildAxisDeadZone2" name="BuildAxisDeadZone2" decimal_digits="2" increment="0.01" min_val="0" max_val="1"/>
70 <spinner bottom="-294" left="265" width="56" label_width="0" control_name="FlycamAxisDeadZone2" ame="FlycamAxisDeadZone2" decimal_digits="2" increment="0.01" min_val="0" max_val="1"/> 70 <spinner bottom="-294" left="265" width="56" label_width="0" control_name="FlycamAxisDeadZone2" name="FlycamAxisDeadZone2" decimal_digits="2" increment="0.01" min_val="0" max_val="1"/>
71 71
72 <text bottom="-314" left="20" width="94" halign="right" name="ZDeadZone">Z Dead Zone</text> 72 <text bottom="-314" left="20" width="94" halign="right" name="ZDeadZone">Z Dead Zone</text>
73 <spinner bottom="-314" left="125" width="56" label_width="0" control_name="AvatarAxisDeadZone0" name="AvatarAxisDeadZone0" decimal_digits="2" increment="0.01" min_val="0" max_val="1"/> 73 <spinner bottom="-314" left="125" width="56" label_width="0" control_name="AvatarAxisDeadZone0" name="AvatarAxisDeadZone0" decimal_digits="2" increment="0.01" min_val="0" max_val="1"/>
diff --git a/linden/indra/newview/skins/xui/en-us/floater_script_debug.xml b/linden/indra/newview/skins/xui/en-us/floater_script_debug.xml
index f9d555d..2abd503 100644
--- a/linden/indra/newview/skins/xui/en-us/floater_script_debug.xml
+++ b/linden/indra/newview/skins/xui/en-us/floater_script_debug.xml
@@ -2,7 +2,7 @@
2<multi_floater bottom="-463" can_close="true" can_drag_on_left="false" can_minimize="true" 2<multi_floater bottom="-463" can_close="true" can_drag_on_left="false" can_minimize="true"
3 can_resize="true" height="233" left="337" min_height="100" min_width="100" 3 can_resize="true" height="233" left="337" min_height="100" min_width="100"
4 mouse_opaque="true" name="script debug floater" 4 mouse_opaque="true" name="script debug floater"
5 rect_control="FloaterScriptDebugRect" title="Script Errors/Warning" 5 rect_control="FloaterScriptDebugRect" title="Script Warning/Error"
6 width="450"> 6 width="450">
7 <tab_container border="false" bottom="-233" follows="left|top|right|bottom" height="217" 7 <tab_container border="false" bottom="-233" follows="left|top|right|bottom" height="217"
8 left="1" mouse_opaque="false" name="Preview Tabs" tab_position="bottom" 8 left="1" mouse_opaque="false" name="Preview Tabs" tab_position="bottom"
diff --git a/linden/indra/newview/skins/xui/en-us/floater_snapshot.xml b/linden/indra/newview/skins/xui/en-us/floater_snapshot.xml
index 3966ac6..1346f7c 100644
--- a/linden/indra/newview/skins/xui/en-us/floater_snapshot.xml
+++ b/linden/indra/newview/skins/xui/en-us/floater_snapshot.xml
@@ -18,13 +18,13 @@
18 Save snapshot to hard drive 18 Save snapshot to hard drive
19 </radio_item> 19 </radio_item>
20 </radio_group> 20 </radio_group>
21 <text bottom="-240" follows="left|top" height="25" left="10" name="file_size_label" 21 <text bottom="-236" follows="left|top" height="25" left="10" name="file_size_label"
22 width="195"> 22 width="195">
23 File size: [SIZE] KB 23 File size: [SIZE] KB
24 </text> 24 </text>
25 <button bottom="-250" follows="left|top" height="20" label="Refresh Snapshot" left="10" 25 <button bottom="-246" follows="left|top" height="20" label="Refresh Snapshot" left="10"
26 name="new_snapshot_btn" width="195" /> 26 name="new_snapshot_btn" width="195" />
27 <button bottom_delta="-20" follows="left|top" height="20" label="Send" left="10" 27 <button bottom_delta="-22" follows="left|top" height="20" label="Send" left="10"
28 name="send_btn" width="105" /> 28 name="send_btn" width="105" />
29 <button bottom_delta="0" follows="left|top" height="20" label="Upload (L$10)" left="10" 29 <button bottom_delta="0" follows="left|top" height="20" label="Upload (L$10)" left="10"
30 name="upload_btn" width="105" /> 30 name="upload_btn" width="105" />
@@ -142,7 +142,7 @@
142 name="keep_open_check" /> 142 name="keep_open_check" />
143 <check_box bottom_delta="-20" follows="left|top" label="Freeze frame (fullscreen preview)" 143 <check_box bottom_delta="-20" follows="left|top" label="Freeze frame (fullscreen preview)"
144 left="10" name="freeze_frame_check" /> 144 left="10" name="freeze_frame_check" />
145 <check_box bottom_delta="-20" follows="left|top" label="Auto-snapshot" left="10" 145 <check_box bottom_delta="-20" follows="left|top" label="Auto-snapshot" left="20"
146 name="auto_snapshot_check" /> 146 name="auto_snapshot_check" />
147 <string name="unknown"> 147 <string name="unknown">
148 unknown 148 unknown
diff --git a/linden/indra/newview/skins/xui/en-us/floater_world_map.xml b/linden/indra/newview/skins/xui/en-us/floater_world_map.xml
index 4e26986..0ebab6f 100644
--- a/linden/indra/newview/skins/xui/en-us/floater_world_map.xml
+++ b/linden/indra/newview/skins/xui/en-us/floater_world_map.xml
@@ -98,51 +98,39 @@
98 font="SansSerifSmall" height="16" initial_value="false" label="" 98 font="SansSerifSmall" height="16" initial_value="false" label=""
99 left_delta="70" mouse_opaque="true" name="telehubchk" width="55" /> 99 left_delta="70" mouse_opaque="true" name="telehubchk" width="55" />
100 <icon bottom="-76" color="1, 1, 1, 1" follows="top|right" height="16" 100 <icon bottom="-76" color="1, 1, 1, 1" follows="top|right" height="16"
101 image_name="icon_popular.tga" left="1123" mouse_opaque="true"
102 name="popular" width="16" />
103 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
104 bottom="-76" drop_shadow_visible="true" follows="top|right"
105 font="SansSerifSmall" h_pad="0" halign="left" height="16" left_delta="20"
106 mouse_opaque="true" name="popular_label" v_pad="0" width="145">
107 Popular
108 </text>
109 <check_box bottom="-76" control_name="MapShowPopular" follows="top|right"
110 font="SansSerifSmall" height="16" initial_value="false" label=""
111 left_delta="80" mouse_opaque="true" name="popular_chk" width="55" />
112 <icon bottom="-96" color="1, 1, 1, 1" follows="top|right" height="16"
113 image_name="icon_for_sale.tga" left="1123" mouse_opaque="true" 101 image_name="icon_for_sale.tga" left="1123" mouse_opaque="true"
114 name="landforsale" width="16" /> 102 name="landforsale" width="16" />
115 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 103 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
116 bottom="-96" drop_shadow_visible="true" follows="top|right" 104 bottom="-76" drop_shadow_visible="true" follows="top|right"
117 font="SansSerifSmall" h_pad="0" halign="left" height="16" left_delta="20" 105 font="SansSerifSmall" h_pad="0" halign="left" height="16" left_delta="20"
118 mouse_opaque="true" name="land_for_sale_label2" v_pad="0" width="145"> 106 mouse_opaque="true" name="land_for_sale_label2" v_pad="0" width="145">
119 Land For Sale 107 Land For Sale
120 </text> 108 </text>
121 <check_box bottom="-96" control_name="MapShowLandForSale" follows="top|right" 109 <check_box bottom="-76" control_name="MapShowLandForSale" follows="top|right"
122 font="SansSerifSmall" height="16" initial_value="false" label="" 110 font="SansSerifSmall" height="16" initial_value="false" label=""
123 left_delta="80" mouse_opaque="true" name="land_for_sale_chk" width="55" /> 111 left_delta="80" mouse_opaque="true" name="land_for_sale_chk" width="55" />
124 <icon bottom="-116" color="1, 1, 1, 1" follows="top|right" height="16" 112 <icon bottom="-96" color="1, 1, 1, 1" follows="top|right" height="16"
125 image_name="map_event.tga" left="1123" mouse_opaque="true" name="event" 113 image_name="map_event.tga" left="1123" mouse_opaque="true" name="event"
126 width="16" /> 114 width="16" />
127 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 115 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
128 bottom="-116" drop_shadow_visible="true" follows="top|right" 116 bottom="-96" drop_shadow_visible="true" follows="top|right"
129 font="SansSerifSmall" h_pad="0" halign="left" height="16" left_delta="20" 117 font="SansSerifSmall" h_pad="0" halign="left" height="16" left_delta="20"
130 mouse_opaque="true" name="events_label" v_pad="0" width="145"> 118 mouse_opaque="true" name="events_label" v_pad="0" width="145">
131 Events 119 Events
132 </text> 120 </text>
133 <check_box bottom="-116" control_name="MapShowEvents" follows="top|right" 121 <check_box bottom="-96" control_name="MapShowEvents" follows="top|right"
134 font="SansSerifSmall" height="16" initial_value="false" label="" 122 font="SansSerifSmall" height="16" initial_value="false" label=""
135 left_delta="80" mouse_opaque="true" name="event_chk" width="55" /> 123 left_delta="80" mouse_opaque="true" name="event_chk" width="55" />
136 <icon bottom="-136" color="1, 1, 1, 1" follows="top|right" height="16" 124 <icon bottom="-116" color="1, 1, 1, 1" follows="top|right" height="16"
137 image_name="map_event_mature.tga" left="1123" mouse_opaque="true" 125 image_name="map_event_mature.tga" left="1123" mouse_opaque="true"
138 name="events_mature_icon" width="16" /> 126 name="events_mature_icon" width="16" />
139 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 127 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
140 bottom="-136" drop_shadow_visible="true" follows="top|right" 128 bottom="-116" drop_shadow_visible="true" follows="top|right"
141 font="SansSerifSmall" h_pad="0" halign="left" height="16" left_delta="20" 129 font="SansSerifSmall" h_pad="0" halign="left" height="16" left_delta="20"
142 mouse_opaque="true" name="events_mature_label" v_pad="0" width="145"> 130 mouse_opaque="true" name="events_mature_label" v_pad="0" width="145">
143 Events (M) 131 Events (M)
144 </text> 132 </text>
145 <check_box bottom="-136" control_name="ShowMatureEvents" follows="top|right" 133 <check_box bottom="-116" control_name="ShowMatureEvents" follows="top|right"
146 font="SansSerifSmall" height="16" initial_value="true" label="" 134 font="SansSerifSmall" height="16" initial_value="true" label=""
147 left_delta="80" mouse_opaque="true" name="event_mature_chk" width="55" /> 135 left_delta="80" mouse_opaque="true" name="event_mature_chk" width="55" />
148 <icon bottom="-181" color="0.5, 0, 0, 1" follows="top|right" height="16" 136 <icon bottom="-181" color="0.5, 0, 0, 1" follows="top|right" height="16"
diff --git a/linden/indra/newview/skins/xui/en-us/menu_viewer.xml b/linden/indra/newview/skins/xui/en-us/menu_viewer.xml
index cdba314..054f867 100644
--- a/linden/indra/newview/skins/xui/en-us/menu_viewer.xml
+++ b/linden/indra/newview/skins/xui/en-us/menu_viewer.xml
@@ -62,34 +62,6 @@
62 </menu_item_call> 62 </menu_item_call>
63 <menu_item_separator bottom="-194" enabled="true" height="8" label="-----------" left="0" 63 <menu_item_separator bottom="-194" enabled="true" height="8" label="-----------" left="0"
64 mouse_opaque="true" name="separator4" width="243" /> 64 mouse_opaque="true" name="separator4" width="243" />
65 <menu bottom="-554" create_jump_keys="true" drop_shadow="true" enabled="true"
66 height="117" label="Set Window Size" left="0" mouse_opaque="false"
67 name="Set Window Size" opaque="true" tear_off="true" width="125">
68 <menu_item_call bottom="-29" enabled="true" height="19" label="320x240" left="0"
69 mouse_opaque="true" name="320x240" width="125">
70 <on_click function="File.SetWindowSize" userdata="320,240" />
71 </menu_item_call>
72 <menu_item_call bottom="-48" enabled="true" height="19" label="640x480" left="0"
73 mouse_opaque="true" name="640x480" width="125">
74 <on_click function="File.SetWindowSize" userdata="640,480" />
75 </menu_item_call>
76 <menu_item_call bottom="-67" enabled="true" height="19" label="800x600" left="0"
77 mouse_opaque="true" name="800x600" width="125">
78 <on_click function="File.SetWindowSize" userdata="800,600" />
79 </menu_item_call>
80 <menu_item_separator bottom="-75" enabled="true" height="8" label="-----------" left="0"
81 mouse_opaque="true" name="separator" width="125" />
82 <menu_item_call bottom="-94" enabled="true" height="19" label="720x480 (NTSC)" left="0"
83 mouse_opaque="true" name="720x480 (NTSC)" width="125">
84 <on_click function="File.SetWindowSize" userdata="720,480" />
85 </menu_item_call>
86 <menu_item_call bottom="-113" enabled="true" height="19" label="768x576 (PAL)" left="0"
87 mouse_opaque="true" name="768x576 (PAL)" width="125">
88 <on_click function="File.SetWindowSize" userdata="768,576" />
89 </menu_item_call>
90 </menu>
91 <menu_item_separator bottom="-240" enabled="true" height="8" label="-----------" left="0"
92 mouse_opaque="true" name="separator5" width="243" />
93 <menu_item_call bottom="-259" enabled="true" height="19" label="Quit" left="0" 65 <menu_item_call bottom="-259" enabled="true" height="19" label="Quit" left="0"
94 mouse_opaque="true" name="Quit" shortcut="control|Q" width="243"> 66 mouse_opaque="true" name="Quit" shortcut="control|Q" width="243">
95 <on_click function="File.Quit" userdata="" /> 67 <on_click function="File.Quit" userdata="" />
@@ -509,6 +481,7 @@
509 <menu_item_check bottom="-86" enabled="true" height="19" label="Fly" left="0" 481 <menu_item_check bottom="-86" enabled="true" height="19" label="Fly" left="0"
510 mouse_opaque="true" name="Fly" shortcut="Home" width="185"> 482 mouse_opaque="true" name="Fly" shortcut="Home" width="185">
511 <on_click function="World.Fly" userdata="" /> 483 <on_click function="World.Fly" userdata="" />
484 <on_enable function="World.EnableFly" />
512 <on_check control="FlyBtnState" /> 485 <on_check control="FlyBtnState" />
513 </menu_item_check> 486 </menu_item_check>
514 <menu_item_separator bottom="-94" enabled="true" height="8" label="-----------" left="0" 487 <menu_item_separator bottom="-94" enabled="true" height="8" label="-----------" left="0"
diff --git a/linden/indra/newview/skins/xui/en-us/mime_types.xml b/linden/indra/newview/skins/xui/en-us/mime_types.xml
index 2a77a8b..e2e6fb2 100644
--- a/linden/indra/newview/skins/xui/en-us/mime_types.xml
+++ b/linden/indra/newview/skins/xui/en-us/mime_types.xml
@@ -166,7 +166,7 @@
166 </widgettype> 166 </widgettype>
167 </mimetype> 167 </mimetype>
168 <mimetype name="image/*"> 168 <mimetype name="image/*">
169 <label label="image2_label"> 169 <label name="image2_label">
170 Image 170 Image
171 </label> 171 </label>
172 <widgettype> 172 <widgettype>
diff --git a/linden/indra/newview/skins/xui/en-us/notify.xml b/linden/indra/newview/skins/xui/en-us/notify.xml
index f0ba148..02aa57c 100644
--- a/linden/indra/newview/skins/xui/en-us/notify.xml
+++ b/linden/indra/newview/skins/xui/en-us/notify.xml
@@ -914,6 +914,21 @@ Click Accept to join the call or Decline to decline the invitation. Click Mute t
914 Mute 914 Mute
915 </option> 915 </option>
916 </notify> 916 </notify>
917 <notify name="AutoUnmuteByIM" tip="false">
918 <message name="message">
919 [FIRST] [LAST] was sent an instant message and has been automatically unmuted.
920 </message>
921 </notify>
922 <notify name="AutoUnmuteByMoney" tip="false">
923 <message name="message">
924 [FIRST] [LAST] was given money and has been automatically unmuted.
925 </message>
926 </notify>
927 <notify name="AutoUnmuteByInventory" tip="false">
928 <message name="message">
929 [FIRST] [LAST] was offered inventory and has been automatically unmuted.
930 </message>
931 </notify>
917 <notify name="VoiceInviteGroup" tip="false" unique="true"> 932 <notify name="VoiceInviteGroup" tip="false" unique="true">
918 <message name="message"> 933 <message name="message">
919 [NAME] has joined a Voice Chat call with the group [GROUP]. 934 [NAME] has joined a Voice Chat call with the group [GROUP].
@@ -1029,4 +1044,9 @@ Click Accept to join the chat or Decline to decline the invitation. Click Mute t
1029 The region you have entered is running a different simulator version. Click this message for details. 1044 The region you have entered is running a different simulator version. Click this message for details.
1030 </message> 1045 </message>
1031 </notify> 1046 </notify>
1047 <notify caution="true" name="UnableToOpenCommandURL" tip="true">
1048 <message name="message">
1049 The URL you clicked cannot be opened from this web browser.
1050 </message>
1051 </notify>
1032</notifications> 1052</notifications>
diff --git a/linden/indra/newview/skins/xui/en-us/panel_avatar_classified.xml b/linden/indra/newview/skins/xui/en-us/panel_avatar_classified.xml
index 001d6d6..d378cb9 100644
--- a/linden/indra/newview/skins/xui/en-us/panel_avatar_classified.xml
+++ b/linden/indra/newview/skins/xui/en-us/panel_avatar_classified.xml
@@ -22,8 +22,18 @@
22 name="classified_map_btn" width="80" /> 22 name="classified_map_btn" width="80" />
23 <combo_box bottom_delta="-27" follows="left|top" height="18" label="" left="10" 23 <combo_box bottom_delta="-27" follows="left|top" height="18" label="" left="10"
24 name="classified_category_combo" right="150" /> 24 name="classified_category_combo" right="150" />
25 <check_box bottom_delta="-1" follows="left|top" height="20" label="Mature" left="160" 25 <combo_box allow_text_entry="false" bottom_delta="-1" follows="left|top" height="20"
26 name="classified_mature_check" width="80" /> 26 label="" left="160" name="classified_mature_check" width="130" >
27 <combo_item name="select_mature" value="Select">
28 - Select Mature -
29 </combo_item>
30 <combo_item name="mature" value="Mature">
31 Mature Content
32 </combo_item>
33 <combo_item name="not_mature" value="Not Mature">
34 Not Mature Content
35 </combo_item>
36 </combo_box>
27 <text bottom_delta="-25" follows="left|top" 37 <text bottom_delta="-25" follows="left|top"
28 font="SansSerifSmall" height="18" left="10" name="classified_info_text" 38 font="SansSerifSmall" height="18" left="10" name="classified_info_text"
29 tool_tip="The more you choose to pay for your ad, the higher in the list it appears." 39 tool_tip="The more you choose to pay for your ad, the higher in the list it appears."
diff --git a/linden/indra/newview/skins/xui/en-us/panel_classified.xml b/linden/indra/newview/skins/xui/en-us/panel_classified.xml
index bc7a4d1..063a110 100644
--- a/linden/indra/newview/skins/xui/en-us/panel_classified.xml
+++ b/linden/indra/newview/skins/xui/en-us/panel_classified.xml
@@ -22,10 +22,21 @@
22 name="classified_map_btn" width="100" /> 22 name="classified_map_btn" width="100" />
23 <button bottom_delta="0" follows="left|top" height="20" label="Profile" left="230" 23 <button bottom_delta="0" follows="left|top" height="20" label="Profile" left="230"
24 name="classified_profile_btn" width="100" /> 24 name="classified_profile_btn" width="100" />
25 <check_box bottom="422" follows="left|top" height="20" label="Mature" left="30" 25 <combo_box allow_text_entry="false" bottom="422" follows="left|top" height="20" left="30"
26 name="classified_mature_check" width="80" /> 26 max_chars="20" mouse_opaque="true" name="classified_mature_check" width="130">
27 <combo_box bottom="445" follows="left|top" height="18" label="" 27 <combo_item name="select_mature" value="Select">
28 left="20" name="classified_category_combo" right="150" /> 28 - Select Mature -
29 </combo_item>
30 <combo_item name="mature" value="Mature">
31 Mature Content
32 </combo_item>
33 <combo_item name="not_mature" value="Not Mature">
34 Not Mature Content
35 </combo_item>
36 </combo_box>
37 <combo_box bg_readonly_color="grey" bottom="445" follows="left|top" height="18" label=""
38 left="20" name="classified_category_combo" right="150"
39 text_readonly_color="white" />
29 <button bottom="400" follows="left|top" height="20" label="Update" left="30" 40 <button bottom="400" follows="left|top" height="20" label="Update" left="30"
30 name="classified_update_btn" width="70" /> 41 name="classified_update_btn" width="70" />
31 <string name="ad_placed_paid"> 42 <string name="ad_placed_paid">
diff --git a/linden/indra/newview/skins/xui/en-us/panel_group_general.xml b/linden/indra/newview/skins/xui/en-us/panel_group_general.xml
index 7332cdf..8103363 100644
--- a/linden/indra/newview/skins/xui/en-us/panel_group_general.xml
+++ b/linden/indra/newview/skins/xui/en-us/panel_group_general.xml
@@ -83,11 +83,6 @@ Hover your mouse over the options for more help.
83 initial_value="true" label="Show in search" left="4" mouse_opaque="true" 83 initial_value="true" label="Show in search" left="4" mouse_opaque="true"
84 name="show_in_group_list" radio_style="false" 84 name="show_in_group_list" radio_style="false"
85 tool_tip="Let people see this group in search results." width="95" /> 85 tool_tip="Let people see this group in search results." width="95" />
86 <check_box bottom_delta="-18" follows="left|top" font="SansSerifSmall" height="16"
87 initial_value="false" label="Mature group" left_delta="0"
88 mouse_opaque="true" name="mature" radio_style="false"
89 tool_tip="Sets whether your group information is considered mature."
90 visible="true" width="95" />
91 <check_box bottom_delta="-18" follows="right|top" font="SansSerifSmall" height="16" 86 <check_box bottom_delta="-18" follows="right|top" font="SansSerifSmall" height="16"
92 initial_value="false" label="Open enrollment" left="4" mouse_opaque="true" 87 initial_value="false" label="Open enrollment" left="4" mouse_opaque="true"
93 name="open_enrollement" radio_style="false" 88 name="open_enrollement" radio_style="false"
@@ -106,6 +101,21 @@ Hover your mouse over the options for more help.
106 mouse_opaque="true" name="spin_enrollment_fee" right_delta="170" 101 mouse_opaque="true" name="spin_enrollment_fee" right_delta="170"
107 tool_tip="New members must pay this fee to join the group when Enrollment Fee is checked." 102 tool_tip="New members must pay this fee to join the group when Enrollment Fee is checked."
108 v_pad="0" width="65" /> 103 v_pad="0" width="65" />
104 <combo_box allow_text_entry="false" bottom_delta="-30" follows="left|top" height="20" left="6"
105 max_chars="20" mouse_opaque="true" name="group_mature_check"
106 tool_tip="Sets whether your group information is considered mature."
107 width="130">
108 <combo_item name="select_mature" value="Select">
109 - Select Mature -
110 </combo_item>
111 <combo_item name="mature" value="Mature">
112 Mature Content
113 </combo_item>
114 <combo_item name="not_mature" value="Not Mature">
115 Not Mature Content
116 </combo_item>
117 </combo_box>
118
109 <panel background_opaque="false" border="false" bottom="-31" height="32" left="225" 119 <panel background_opaque="false" border="false" bottom="-31" height="32" left="225"
110 name="title_container" width="160"> 120 name="title_container" width="160">
111 <text bottom="17" font="SansSerifSmall" left="0" name="active_title_label"> 121 <text bottom="17" font="SansSerifSmall" left="0" name="active_title_label">
diff --git a/linden/indra/newview/skins/xui/en-us/panel_group_notices.xml b/linden/indra/newview/skins/xui/en-us/panel_group_notices.xml
index 7f0c0f7..0e5e84d 100644
--- a/linden/indra/newview/skins/xui/en-us/panel_group_notices.xml
+++ b/linden/indra/newview/skins/xui/en-us/panel_group_notices.xml
@@ -24,8 +24,9 @@ the General tab.
24 bottom_delta="-20" drop_shadow_visible="true" font="SansSerifSmall" 24 bottom_delta="-20" drop_shadow_visible="true" font="SansSerifSmall"
25 h_pad="0" halign="left" height="16" left_delta="0" mouse_opaque="true" 25 h_pad="0" halign="left" height="16" left_delta="0" mouse_opaque="true"
26 name="lbl2" v_pad="0" width="436"> 26 name="lbl2" v_pad="0" width="436">
27 Notices are kept for 30 days. Click the notice below you wish to view. 27 Notices are kept for 14 days. Click the notice below you wish to view.
28Click the &apos;Refresh&apos; button to check if new notices have been received. 28Click the &apos;Refresh&apos; button to check if new notices have been received.
29Notice lists are limited to 200 notices per group on a daily basis.
29 </text> 30 </text>
30 <scroll_list background_visible="true" bottom_delta="-137" column_padding="0" 31 <scroll_list background_visible="true" bottom_delta="-137" column_padding="0"
31 draw_border="true" draw_heading="true" enabled="true" 32 draw_border="true" draw_heading="true" enabled="true"
diff --git a/linden/indra/newview/skins/xui/en-us/panel_preferences_graphics1.xml b/linden/indra/newview/skins/xui/en-us/panel_preferences_graphics1.xml
index fbcb773..527309e 100644
--- a/linden/indra/newview/skins/xui/en-us/panel_preferences_graphics1.xml
+++ b/linden/indra/newview/skins/xui/en-us/panel_preferences_graphics1.xml
@@ -16,22 +16,48 @@
16 If unchecked, viewer will display full-screen when logged in. 16 If unchecked, viewer will display full-screen when logged in.
17 </text_editor> 17 </text_editor>
18 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 18 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
19 bottom="-39" drop_shadow_visible="true" enabled="true" follows="left|top" 19 bottom="-62" drop_shadow_visible="true" enabled="true" follows="left|top"
20 font="SansSerifSmall" h_pad="0" halign="left" height="12" left="10"
21 mouse_opaque="true" name="WindowSizeLabel" v_pad="0" width="128">
22 Window Size:
23 </text>
24 <combo_box allow_text_entry="false" bottom="-67" enabled="true" follows="left|top"
25 height="18" left="185" max_chars="20" mouse_opaque="true"
26 name="windowsize combo" width="150">
27 <combo_item type="string" length="1" enabled="true" name="640x480" value="640 x 480">
28 640x480
29 </combo_item>
30 <combo_item type="string" length="1" enabled="true" name="800x600" value="800 x 600">
31 800x600
32 </combo_item>
33 <combo_item type="string" length="1" enabled="true" name="720x480" value="720 x 480">
34 720x480 (NTSC)
35 </combo_item>
36 <combo_item type="string" length="1" enabled="true" name="768x576" value="768 x 576">
37 768x576 (PAL)
38 </combo_item>
39 <combo_item type="string" length="1" enabled="true" name="1024x768" value="1024 x 768">
40 1024x768
41 </combo_item>
42
43 </combo_box>
44 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
45 bottom="-62" drop_shadow_visible="true" enabled="true" follows="left|top"
20 font="SansSerifSmall" h_pad="0" halign="left" height="12" left="10" 46 font="SansSerifSmall" h_pad="0" halign="left" height="12" left="10"
21 mouse_opaque="true" name="DisplayResLabel" v_pad="0" width="128"> 47 mouse_opaque="true" name="DisplayResLabel" v_pad="0" width="128">
22 Display Resolution: 48 Display Resolution:
23 </text> 49 </text>
24 <combo_box allow_text_entry="false" bottom="-44" enabled="true" follows="left|top" 50 <combo_box allow_text_entry="false" bottom="-67" enabled="true" follows="left|top"
25 height="18" left="185" max_chars="20" mouse_opaque="true" 51 height="18" left="185" max_chars="20" mouse_opaque="true"
26 name="fullscreen combo" width="150" /> 52 name="fullscreen combo" width="150" />
27 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 53 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
28 bottom="-62" drop_shadow_visible="true" enabled="true" follows="left|top" 54 bottom="-39" drop_shadow_visible="true" enabled="true" follows="left|top"
29 font="SansSerifSmall" h_pad="0" halign="left" height="12" 55 font="SansSerifSmall" h_pad="0" halign="left" height="12"
30 left="10" mouse_opaque="true" name="AspectRatioLabel1" 56 left="10" mouse_opaque="true" name="AspectRatioLabel1"
31 tool_tip="width / height" v_pad="0" width="160"> 57 tool_tip="width / height" v_pad="0" width="160">
32 Aspect Ratio: 58 Aspect Ratio:
33 </text> 59 </text>
34 <combo_box allow_text_entry="true" bottom="-66" enabled="true" follows="left|top" 60 <combo_box allow_text_entry="true" bottom="-43" enabled="true" follows="left|top"
35 height="16" left="185" max_chars="100" mouse_opaque="true" 61 height="16" left="185" max_chars="100" mouse_opaque="true"
36 name="aspect_ratio" tool_tip="width / height" width="150"> 62 name="aspect_ratio" tool_tip="width / height" width="150">
37 <combo_item type="string" length="1" enabled="true" name="4:3(StandardCRT)" value="1.333333"> 63 <combo_item type="string" length="1" enabled="true" name="4:3(StandardCRT)" value="1.333333">
@@ -47,7 +73,7 @@
47 16:9 (Widescreen) 73 16:9 (Widescreen)
48 </combo_item> 74 </combo_item>
49 </combo_box> 75 </combo_box>
50 <check_box bottom="-67" control_name="FullScreenAutoDetectAspectRatio" enabled="true" 76 <check_box bottom="-44" control_name="FullScreenAutoDetectAspectRatio" enabled="true"
51 follows="left|top" font="SansSerifSmall" height="16" initial_value="false" 77 follows="left|top" font="SansSerifSmall" height="16" initial_value="false"
52 label="Auto-detect ratio" left="358" mouse_opaque="true" 78 label="Auto-detect ratio" left="358" mouse_opaque="true"
53 name="aspect_auto_detect" radio_style="false" width="256" /> 79 name="aspect_auto_detect" radio_style="false" width="256" />
diff --git a/linden/indra/newview/skins/xui/en-us/panel_preferences_web.xml b/linden/indra/newview/skins/xui/en-us/panel_preferences_web.xml
index a32ca56..4d84e32 100644
--- a/linden/indra/newview/skins/xui/en-us/panel_preferences_web.xml
+++ b/linden/indra/newview/skins/xui/en-us/panel_preferences_web.xml
@@ -3,13 +3,13 @@
3 height="408" label="Web" left="102" mouse_opaque="true" name="web" 3 height="408" label="Web" left="102" mouse_opaque="true" name="web"
4 width="517"> 4 width="517">
5 <radio_group bottom="-45" draw_border="false" follows="top|left" height="40" left="12" 5 <radio_group bottom="-45" draw_border="false" follows="top|left" height="40" left="12"
6 name="use_external_browser" 6 name="use_external_browser" width="480">
7 tool_tip="Use outside web browser for help, web links, etc. Not recommended if running full screen." 7 <radio_item bottom="-20" height="20" left="0" name="external" width="480"
8 width="480"> 8 tool_tip="Use the default system web browser for help, web links, etc. Not recommended if running full screen.">
9 <radio_item bottom="-20" height="20" left="0" name="external" width="480">
10 Use external web browser (Firefox, Safari, Internet Explorer) 9 Use external web browser (Firefox, Safari, Internet Explorer)
11 </radio_item> 10 </radio_item>
12 <radio_item bottom="-40" height="20" left="0" name="internal" width="480"> 11 <radio_item bottom="-40" height="20" left="0" name="internal" width="480"
12 tool_tip="Use the built-in web browser for help, web links, etc. This browser opens as a new window inside Second Life.">
13 Use built-in web browser 13 Use built-in web browser
14 </radio_item> 14 </radio_item>
15 </radio_group> 15 </radio_group>
diff --git a/linden/indra/newview/skins/xui/en-us/panel_region_general.xml b/linden/indra/newview/skins/xui/en-us/panel_region_general.xml
index fa12fca..af3cecf 100644
--- a/linden/indra/newview/skins/xui/en-us/panel_region_general.xml
+++ b/linden/indra/newview/skins/xui/en-us/panel_region_general.xml
@@ -9,6 +9,14 @@
9 name="region_text" width="400"> 9 name="region_text" width="400">
10 unknown 10 unknown
11 </text> 11 </text>
12 <text bottom="-50" follows="left|top" font="SansSerif" height="20" left="10"
13 name="version_channel_text_lbl" width="100">
14 Version:
15 </text>
16 <text bottom_delta="0" follows="left|top" font="SansSerif" height="20" left="60"
17 name="version_channel_text" width="200">
18 unknown
19 </text>
12 <check_box bottom_delta="-20" follows="left|top" height="20" label="Block Terraform" 20 <check_box bottom_delta="-20" follows="left|top" height="20" label="Block Terraform"
13 left="10" name="block_terraform_check" width="80" /> 21 left="10" name="block_terraform_check" width="80" />
14 <button bottom_delta="0" follows="left|top" font="SansSerifSmall" height="18" label="?" 22 <button bottom_delta="0" follows="left|top" font="SansSerifSmall" height="18" label="?"
@@ -74,6 +82,6 @@
74 label="Teleport Home All Users..." left="10" name="kick_all_btn" width="250" /> 82 label="Teleport Home All Users..." left="10" name="kick_all_btn" width="250" />
75 <button bottom_delta="-40" follows="left|top" height="20" 83 <button bottom_delta="-40" follows="left|top" height="20"
76 label="Send Message To Region..." left="10" name="im_btn" width="200" /> 84 label="Send Message To Region..." left="10" name="im_btn" width="200" />
77 <button bottom="-50" follows="left|top" height="20" label="Manage Telehub..." 85 <button bottom="-70" follows="left|top" height="20" label="Manage Telehub..."
78 left="250" name="manage_telehub_btn" width="150" /> 86 left="250" name="manage_telehub_btn" width="150" />
79</panel> 87</panel>
diff --git a/linden/indra/newview/skins/xui/en-us/strings.xml b/linden/indra/newview/skins/xui/en-us/strings.xml
new file mode 100644
index 0000000..9952d56
--- /dev/null
+++ b/linden/indra/newview/skins/xui/en-us/strings.xml
@@ -0,0 +1,166 @@
1<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
2<!-- This file contains strings that used to be hardcoded in the source.
3 It is only for those strings which don't belong in a floater.
4 For example, the strings used in avatar chat bubbles, and strings
5 that are returned from one component and may appear in many places-->
6<strings>
7
8 <!-- Login -->
9 <string name="LoginInProgress">Logging in. [APP_NAME] may appear frozen. Please wait.</string>
10 <string name="LoginAuthenticating">Authenticating</string>
11 <string name="LoginMaintenance">Performing account maintenance...</string>
12 <string name="LoginAttempt">Previous login attempt failed. Logging in, attempt [NUMBER]</string>
13 <string name="LoginPrecaching">Loading world...</string>
14 <string name="LoginInitializingBrowser">Initializing embedded web browser...</string>
15 <string name="LoginVerifyingCache">Verifying cache files (can take 60-90 seconds)...</string>
16 <string name="LoginProcessingResponse">Processing Response...</string>
17 <string name="LoginInitializingWorld">Initializing World...</string>
18 <string name="LoginDecodingImages">Decoding images...</string>
19 <string name="LoginInitializingQuicktime">Initializing QuickTime...</string>
20 <string name="LoginQuicktimeNotFound">QuickTime not found - unable to initialize.</string>
21 <string name="LoginQuicktimeOK">QuickTime initialized successfully.</string>
22 <string name="LoginWaitingForRegionHandshake">Waiting for region handshake...</string>
23 <string name="LoginConnectingToRegion">Connecting to region...</string>
24 <string name="LoginDownloadingClothing">Downloading clothing...</string>
25
26
27
28 <!-- Tooltip, llhoverview.cpp. Note: spaces at the end are intentional -->
29 <string name="TooltipPerson">Person</string><!-- Object under mouse pointer is an avatar -->
30 <string name="TooltipNoName">(no name)</string> <!-- No name on an object -->
31 <string name="TooltipOwner">Owner:</string> <!-- Owner name follows -->
32 <string name="TooltipPublic">Public</string> <!-- Public permissions on an object -->
33 <string name="TooltipIsGroup">(Group)</string> <!-- The name before this text is that of a group -->
34 <string name="TooltipFlagScript">Script</string>
35 <string name="TooltipFlagPhysics">Physics</string>
36 <string name="TooltipFlagTouch">Touch</string>
37 <string name="TooltipFlagL$">L$</string>
38 <string name="TooltipFlagDropInventory">Drop Inventory</string>
39 <string name="TooltipFlagPhantom">Phantom</string>
40 <string name="TooltipFlagTemporary">Temporary</string>
41 <string name="TooltipFlagRightClickMenu">(Right-click for menu)</string>
42 <string name="TooltipFreeToCopy">Free to copy</string>
43 <string name="TooltipForSaleL$">For Sale: L$[AMOUNT]</string> <!-- L$ version -->
44 <string name="TooltipForSaleMsg">For Sale: [MESSAGE]</string> <!-- Message (RetrievingData) -->
45 <string name="TooltipFlagGroupBuild">Group Build</string>
46 <string name="TooltipFlagNoBuild">No Build</string>
47 <string name="TooltipFlagNoEdit">Group Build</string>
48 <string name="TooltipFlagNotSafe">Not Safe</string><!-- damage area -->
49 <string name="TooltipFlagNoFly">No Fly</string>
50 <string name="TooltipFlagGroupScripts">Group Scripts</string>
51 <string name="TooltipFlagNoScripts">No Scripts</string>
52
53 <string name="TooltipLand">Land:</string>
54
55
56 <!-- Indicates that an avatar's name or other similar datum is being retrieved. General usage. -->
57 <string name="RetrievingData">Retrieving...</string>
58
59 <!-- Indicates something is being loaded. Maybe should be merged with RetrievingData -->
60 <string name="LoadingData">Loading...</string>
61
62
63 <!-- namecache -->
64 <!-- Avatar name: text shown for LLUUID::null -->
65 <string name="AvatarNameNobody">(nobody)</string>
66
67 <!-- Avatar name: text shown while fetching name -->
68 <string name="AvatarNameWaiting">(waiting)</string>
69
70 <!-- Avatar name: text shown as an alternative to AvatarNameFetching, easter egg. -->
71 <string name="AvatarNameHippos">(hippos)</string>
72
73 <!-- Group name: text shown for LLUUID::null -->
74 <string name="GroupNameNone">(none)</string>
75
76 <!-- Asset errors. Used in llassetstorage.cpp, translation from error code to error message. -->
77 <string name="AssetErrorNone">No error</string>
78 <string name="AssetErrorRequestFailed">Asset request: failed</string>
79 <string name="AssetErrorNonexistentFile">Asset request: non-existent file</string>
80 <string name="AssetErrorNotInDatabase">Asset request: asset not found in database</string>
81 <string name="AssetErrorEOF">End of file</string>
82 <string name="AssetErrorCannotOpenFile">Cannot open file</string>
83 <string name="AssetErrorFileNotFound">File not found</string>
84 <string name="AssetErrorTCPTimeout">File transfer timeout</string>
85 <string name="AssetErrorCircuitGone">Circuit gone</string>
86 <string name="AssetErrorUnknownStatus">Unknown status</string>
87
88 <!-- llvoavatar. Displayed in the avatar's chat bubble -->
89 <string name="AvatarEditingApparance">(Editing Appearance)</string>
90 <string name="AvatarAway">Away</string>
91 <string name="AvatarBusy">Busy</string>
92 <string name="AvatarMuted">Muted</string>
93
94 <!-- animations -->
95 <string name="anim_express_afraid">Afraid</string>
96 <string name="anim_express_anger">Angry</string>
97 <string name="anim_away">Away</string>
98 <string name="anim_backflip">Backflip</string>
99 <string name="anim_express_laugh">Belly Laugh</string>
100 <string name="anim_express_toothsmile">BigSmile</string>
101 <string name="anim_blowkiss">Blow Kiss</string>
102 <string name="anim_express_bored">Bored</string>
103 <string name="anim_bow">Bow</string>
104 <string name="anim_clap">Clap</string>
105 <string name="anim_courtbow">Court Bow</string>
106 <string name="anim_express_cry">Cry</string>
107 <string name="anim_dance1">Dance 1</string>
108 <string name="anim_dance2">Dance 2</string>
109 <string name="anim_dance3">Dance 3</string>
110 <string name="anim_dance4">Dance 4</string>
111 <string name="anim_dance5">Dance 5</string>
112 <string name="anim_dance6">Dance 6</string>
113 <string name="anim_dance7">Dance 7</string>
114 <string name="anim_dance8">Dance 8</string>
115 <string name="anim_express_disdain">Disdain</string>
116 <string name="anim_drink">Drink</string>
117 <string name="anim_express_embarrased">Embarrassed</string>
118 <string name="anim_angry_fingerwag">Finger Wag</string>
119 <string name="anim_fist_pump">Fist Pump</string>
120 <string name="anim_yoga_float">Floating Yoga</string>
121 <string name="anim_express_frown">Frown</string>
122 <string name="anim_impatient">Impatient</string>
123 <string name="anim_jumpforjoy">Jump For Joy</string>
124 <string name="anim_kissmybutt">Kiss My Butt</string>
125 <string name="anim_express_kiss">Kiss</string>
126 <string name="anim_laugh_short">Laugh</string>
127 <string name="anim_musclebeach">Muscle Beach</string>
128 <string name="anim_no_unhappy">No (Unhappy)</string>
129 <string name="anim_no_head">No</string>
130 <string name="anim_nyanya">Nya-nya-nya</string>
131 <string name="anim_punch_onetwo">One-Two Punch</string>
132 <string name="anim_express_open_mouth">Open Mouth</string>
133 <string name="anim_peace">Peace</string>
134 <string name="anim_point_you">Point at Other</string>
135 <string name="anim_point_me">Point at Self</string>
136 <string name="anim_punch_l">Punch Left</string>
137 <string name="anim_punch_r">Punch Right</string>
138 <string name="anim_rps_countdown">RPS count</string>
139 <string name="anim_rps_paper">RPS paper</string>
140 <string name="anim_rps_rock">RPS rock</string>
141 <string name="anim_rps_scissors">RPS scissors</string>
142 <string name="anim_express_repulsed">Repulsed</string>
143 <string name="anim_kick_roundhouse_r">Roundhouse Kick</string>
144 <string name="anim_express_sad">Sad</string>
145 <string name="anim_salute">Salute</string>
146 <string name="anim_shout">Shout</string>
147 <string name="anim_express_shrug">Shrug</string>
148 <string name="anim_express_smile">Smile</string>
149 <string name="anim_smoke_idle">Smoke Idle</string>
150 <string name="anim_smoke_inhale">Smoke Inhale</string>
151 <string name="anim_smoke_throw_down">Smoke Throw Down</string>
152 <string name="anim_express_surprise">Surprise</string>
153 <string name="anim_sword_strike_r">Sword Strike</string>
154 <string name="anim_angry_tantrum">Tantrum</string>
155 <string name="anim_express_tongue_out">TongueOut</string>
156 <string name="anim_hello">Wave</string>
157 <string name="anim_whisper">Whisper</string>
158 <string name="anim_whistle">Whistle</string>
159 <string name="anim_express_wink">Wink</string>
160 <string name="anim_wink_hollywood">Wink (Hollywood)</string>
161 <string name="anim_express_worry">Worry</string>
162 <string name="anim_yes_happy">Yes (Happy)</string>
163 <string name="anim_yes_head">Yes</string>
164
165</strings>
166
diff --git a/linden/indra/newview/skins/xui/es/panel_group_notices.xml b/linden/indra/newview/skins/xui/es/panel_group_notices.xml
index 86b8d2c..62d884d 100644
--- a/linden/indra/newview/skins/xui/es/panel_group_notices.xml
+++ b/linden/indra/newview/skins/xui/es/panel_group_notices.xml
@@ -16,7 +16,7 @@ pestaña General.
16 Archivo de avisos de grupo 16 Archivo de avisos de grupo
17 </text> 17 </text>
18 <text name="lbl2"> 18 <text name="lbl2">
19 Avisos son mantenidos por 30 días. Haga clic en el aviso abajo se desea verlo. 19 Avisos son mantenidos por 14 días. Haga clic en el aviso abajo se desea verlo.
20Haga clic en el botón &apos;Actualizar lista&apos; si nuevos avisos fueron recibidos. 20Haga clic en el botón &apos;Actualizar lista&apos; si nuevos avisos fueron recibidos.
21 </text> 21 </text>
22 <scroll_list name="notice_list"> 22 <scroll_list name="notice_list">
diff --git a/linden/indra/newview/skins/xui/fr/panel_group_notices.xml b/linden/indra/newview/skins/xui/fr/panel_group_notices.xml
index 6643107..a266155 100644
--- a/linden/indra/newview/skins/xui/fr/panel_group_notices.xml
+++ b/linden/indra/newview/skins/xui/fr/panel_group_notices.xml
@@ -16,7 +16,7 @@ l&apos;onglet Général.
16 Archive des Notifications du Groupe 16 Archive des Notifications du Groupe
17 </text> 17 </text>
18 <text name="lbl2"> 18 <text name="lbl2">
19 Les Notifications sont conservées pendant 30 jours. Cliquez sur la notification que vous souhaitez afficher. 19 Les Notifications sont conservées pendant 14 jours. Cliquez sur la notification que vous souhaitez afficher.
20Cliquez sur &apos;Actualiser&apos; pour afficher les nouvelles notifications. 20Cliquez sur &apos;Actualiser&apos; pour afficher les nouvelles notifications.
21 </text> 21 </text>
22 <scroll_list name="notice_list"> 22 <scroll_list name="notice_list">
diff --git a/linden/indra/newview/skins/xui/ja/floater_about.xml b/linden/indra/newview/skins/xui/ja/floater_about.xml
index 0567010..75983b5 100644
--- a/linden/indra/newview/skins/xui/ja/floater_about.xml
+++ b/linden/indra/newview/skins/xui/ja/floater_about.xml
@@ -26,7 +26,7 @@ zlib Copyright (C) 1995-2002 Jean-loup Gailly and Mark Adler.
26Voice chat Audio coding:Polycom(R) Siren14(TM) (ITU-T Rec.G.722.1 Annex C) 26Voice chat Audio coding:Polycom(R) Siren14(TM) (ITU-T Rec.G.722.1 Annex C)
27 27
28 28
29Happiness is a warm puppy. (しあわせはcあったかい子犬)-- チャールズ・M・シュルツ 29Happiness is a warm puppy. (しあわせはあったかい子犬)-- チャールズ・M・シュルツ
30 </text_editor> 30 </text_editor>
31 <text name="you_are_at"> 31 <text name="you_are_at">
32 [POSITION]中 32 [POSITION]中
diff --git a/linden/indra/newview/skins/xui/ja/floater_html.xml b/linden/indra/newview/skins/xui/ja/floater_html.xml
index 1cb5384..6e1e7a0 100644
--- a/linden/indra/newview/skins/xui/ja/floater_html.xml
+++ b/linden/indra/newview/skins/xui/ja/floater_html.xml
@@ -5,4 +5,7 @@
5 <button label="ホーム" name="home_btn" /> 5 <button label="ホーム" name="home_btn" />
6 <button label="進む" name="forward_btn" /> 6 <button label="進む" name="forward_btn" />
7 <button label="移動" name="go_btn" /> 7 <button label="移動" name="go_btn" />
8 <string name="home_page_url">
9 http://jp.secondlife.com
10 </string>
8</floater> 11</floater>
diff --git a/linden/indra/newview/skins/xui/ja/floater_joystick.xml b/linden/indra/newview/skins/xui/ja/floater_joystick.xml
index 517b9dd..baef61c 100644
--- a/linden/indra/newview/skins/xui/ja/floater_joystick.xml
+++ b/linden/indra/newview/skins/xui/ja/floater_joystick.xml
@@ -3,65 +3,116 @@
3 <spinner label="X軸マッピング" name="JoystickAxis1" /> 3 <spinner label="X軸マッピング" name="JoystickAxis1" />
4 <spinner label="Y軸マッピング" name="JoystickAxis2" /> 4 <spinner label="Y軸マッピング" name="JoystickAxis2" />
5 <spinner label="Z軸マッピング" name="JoystickAxis0" /> 5 <spinner label="Z軸マッピング" name="JoystickAxis0" />
6 <spinner label="ピッチ・マッピング" name="JoystickAxis4" /> 6 <spinner label="ピッチ・マッピング" name="JoystickAxis4" label_width="110" left="10" width="150"/>
7 <spinner label="ヨー・マッピング" name="JoystickAxis5" /> 7 <spinner label="ヨー・マッピング" name="JoystickAxis5" />
8 <spinner label="ロール・マッピング" name="JoystickAxis3" /> 8 <spinner label="ロール・マッピング" name="JoystickAxis3" label_width="110" left="350" width="150"/>
9 <spinner label="ズーム・マッピング" name="JoystickAxis6" /> 9 <spinner label="ズーム・マッピング" name="JoystickAxis6" label_width="110" left="10" width="150"/>
10 <check_box label="直接ズーム" name="ZoomDirect" /> 10 <check_box label="直接ズーム" name="ZoomDirect" />
11 <check_box label="3Dカーソル" name="Cursor3D" /> 11 <check_box label="3Dカーソル" name="Cursor3D" />
12 <check_box label="自動レベル" name="AutoLeveling" /> 12 <check_box label="自動レベル" name="AutoLeveling" />
13 <text name="Control Modes:"> 13 <text name="Control Modes:">
14 制御モード: 14 制御モード:
15 </text> 15 </text>
16 <check_box name="JoystickAvatarEnabled">アバター</check_box> 16 <check_box left="131" name="JoystickAvatarEnabled">アバター</check_box>
17 <check_box name="JoystickBuildEnabled">造る</check_box> 17 <check_box left="201" name="JoystickBuildEnabled">造る</check_box>
18 <check_box name="JoystickFlycamEnabled">フライ・カメラ</check_box> 18 <check_box left="271" name="JoystickFlycamEnabled">フライ・カメラ</check_box>
19 <text name="XScale"> 19 <text name="XScale" left="5" width="120">
20 Xスケール 20 Xスケール
21 </text> 21 </text>
22 <text name="YScale"> 22 <spinner left="135" width="50" name="AvatarAxisScale1" />
23 <spinner left="205" width="50" name="BuildAxisScale1" />
24 <spinner left="275" width="50" name="FlycamAxisScale1" />
25
26 <text name="YScale" left="5" width="120">
23 Yスケール 27 Yスケール
24 </text> 28 </text>
25 <text name="ZScale"> 29 <spinner left="135" width="50" name="AvatarAxisScale2" />
30 <spinner left="205" width="50" name="BuildAxisScale2" />
31 <spinner left="275" width="50" name="FlycamAxisScale2" />
32
33 <text name="ZScale" left="5" width="120">
26 Zスケール 34 Zスケール
27 </text> 35 </text>
28 <text name="PitchScale"> 36 <spinner left="135" width="50" name="AvatarAxisScale0" />
37 <spinner left="205" width="50" name="BuildAxisScale0" />
38 <spinner left="275" width="50" name="FlycamAxisScale0" />
39
40 <text name="PitchScale" left="5" width="120">
29 ピッチ・スケール 41 ピッチ・スケール
30 </text> 42 </text>
31 <text name="YawScale"> 43 <spinner left="135" width="50" name="AvatarAxisScale4" />
44 <spinner left="205" width="50" name="BuildAxisScale4" />
45 <spinner left="275" width="50" name="FlycamAxisScale4" />
46
47 <text name="YawScale" left="5" width="120">
32 ヨー・スケール 48 ヨー・スケール
33 </text> 49 </text>
34 <text name="RollScale"> 50 <spinner left="135" width="50" name="AvatarAxisScale5" />
51 <spinner left="205" width="50" name="BuildAxisScale5" />
52 <spinner left="275" width="50" name="FlycamAxisScale5" />
53
54 <text name="RollScale" left="5" width="120">
35 ロール・スケール 55 ロール・スケール
36 </text> 56 </text>
37 <text name="XDeadZone"> 57 <spinner left="205" width="50" name="BuildAxisScale3" />
58 <spinner left="275" width="50" name="FlycamAxisScale3" />
59
60 <text name="XDeadZone" left="5" width="120">
38 Xデッド・ゾーン 61 Xデッド・ゾーン
39 </text> 62 </text>
40 <text name="YDeadZone"> 63 <spinner left="135" width="50" name="AvatarAxisDeadZone1" />
64 <spinner left="205" width="50" name="BuildAxisDeadZone1" />
65 <spinner left="275" width="50" name="FlycamAxisDeadZone1"/>
66
67 <text name="YDeadZone" left="5" width="120">
41 Yデッド・ゾーン 68 Yデッド・ゾーン
42 </text> 69 </text>
43 <text name="ZDeadZone"> 70 <spinner left="135" width="50" name="AvatarAxisDeadZone2"/>
71 <spinner left="205" width="50" name="BuildAxisDeadZone2"/>
72 <spinner left="275" width="50" name="FlycamAxisDeadZone2" />
73
74 <text name="ZDeadZone" left="5" width="120">
44 Zデッド・ゾーン 75 Zデッド・ゾーン
45 </text> 76 </text>
46 <text name="PitchDeadZone"> 77 <spinner left="135" width="50" name="AvatarAxisDeadZone0" />
78 <spinner left="205" width="50" name="BuildAxisDeadZone0" />
79 <spinner left="275" width="50" name="FlycamAxisDeadZone0" />
80
81 <text name="PitchDeadZone" left="0" width="135">
47 ピッチ・デッド・ゾーン 82 ピッチ・デッド・ゾーン
48 </text> 83 </text>
49 <text name="YawDeadZone"> 84 <spinner left="135" width="50" name="AvatarAxisDeadZone4"/>
85 <spinner left="205" width="50" name="BuildAxisDeadZone4"/>
86 <spinner left="275" width="50" name="FlycamAxisDeadZone4"/>
87
88 <text name="YawDeadZone" left="5" width="120">
50 ヨー・デッド・ゾーン 89 ヨー・デッド・ゾーン
51 </text> 90 </text>
52 <text name="RollDeadZone"> 91 <spinner left="135" width="50" name="AvatarAxisDeadZone5" />
92 <spinner left="205" width="50" name="BuildAxisDeadZone5" />
93 <spinner left="275" width="50" name="FlycamAxisDeadZone5" />
94
95 <text name="RollDeadZone" left="0" width="135">
53 ロール・デッド・ゾーン 96 ロール・デッド・ゾーン
54 </text> 97 </text>
98 <spinner left="205" width="50" name="BuildAxisDeadZone3" />
99 <spinner left="275" width="50" name="FlycamAxisDeadZone3" />
100
55 <text name="Feathering"> 101 <text name="Feathering">
56 羽毛 102 羽毛
57 </text> 103 </text>
58 <text name="ZoomScale2"> 104 <slider left="126" width="67" name="AvatarFeathering" />
105 <slider left="196" width="67" name="BuildFeathering" />
106 <slider left="266" width="67" name="FlycamFeathering" />
107 <text name="ZoomScale2" left="0" width="140">
59 ズーム・スケール 108 ズーム・スケール
60 </text> 109 </text>
61 <text name="ZoomDeadZone"> 110 <spinner left="275" width="50" name="FlycamAxisScale6" />
111 <text name="ZoomDeadZone" left="0" width="140">
62 ズーム・デッド・ゾーン 112 ズーム・デッド・ゾーン
63 </text> 113 </text>
64 <button label="SpaceNavigatorのデフォルト設定" name="SpaceNavigatorDefaults" /> 114 <spinner left="275" width="50" name="FlycamAxisDeadZone6" />
115 <button label="SpaceNavigatorのデフォルト設定" name="SpaceNavigatorDefaults" width="210" left="330"/>
65<!-- Reverted the translation of the Joystick Monitor axes due to monospace font that cannot support UTF8 (see VWR-6608) 116<!-- Reverted the translation of the Joystick Monitor axes due to monospace font that cannot support UTF8 (see VWR-6608)
66 <string name="JoystickMonitor"> 117 <string name="JoystickMonitor">
67 ジョイスティック・モニター 118 ジョイスティック・モニター
diff --git a/linden/indra/newview/skins/xui/ja/mime_types.xml b/linden/indra/newview/skins/xui/ja/mime_types.xml
index a7019ad..9bebc7c 100644
--- a/linden/indra/newview/skins/xui/ja/mime_types.xml
+++ b/linden/indra/newview/skins/xui/ja/mime_types.xml
@@ -78,7 +78,7 @@
78 </label> 78 </label>
79 </mimetype> 79 </mimetype>
80 <mimetype name="image/*"> 80 <mimetype name="image/*">
81 <label label="image2_label"> 81 <label name="image2_label">
82 画像 82 画像
83 </label> 83 </label>
84 </mimetype> 84 </mimetype>
diff --git a/linden/indra/newview/skins/xui/ja/panel_group_notices.xml b/linden/indra/newview/skins/xui/ja/panel_group_notices.xml
index 46eb096..f63c368 100644
--- a/linden/indra/newview/skins/xui/ja/panel_group_notices.xml
+++ b/linden/indra/newview/skins/xui/ja/panel_group_notices.xml
@@ -15,7 +15,7 @@
15 グループ通知アーカイブ 15 グループ通知アーカイブ
16 </text> 16 </text>
17 <text name="lbl2"> 17 <text name="lbl2">
18 通知は、30日間保存されます。 閲覧したい通知をクリックしてください。 18 通知は、14日間保存されます。 閲覧したい通知をクリックしてください。
19新着の通知をチェックするには、[更新]ボタンをクリックします。 19新着の通知をチェックするには、[更新]ボタンをクリックします。
20 </text> 20 </text>
21 <scroll_list name="notice_list"> 21 <scroll_list name="notice_list">
diff --git a/linden/indra/newview/skins/xui/ja/panel_preferences_graphics1.xml b/linden/indra/newview/skins/xui/ja/panel_preferences_graphics1.xml
index d3d3734..19e443a 100644
--- a/linden/indra/newview/skins/xui/ja/panel_preferences_graphics1.xml
+++ b/linden/indra/newview/skins/xui/ja/panel_preferences_graphics1.xml
@@ -14,14 +14,14 @@
14 <text type="string" length="1" name="(width / height)"> 14 <text type="string" length="1" name="(width / height)">
15 (幅/高さ) 15 (幅/高さ)
16 </text> 16 </text>
17 <text_editor name="FullScreenInfo" width="480" bottom="-63" height="40"> 17 <text_editor name="FullScreenInfo" width="480" bottom="-56" height="40">
18 チェックされていない場合は、ログインするとビューワがフルスクリーンで表示されます。 18 チェックされていない場合は、ログインするとビューワがフルスクリーンで表示されます。
19 </text_editor> 19 </text_editor>
20 <text name="DisplayResLabel"> 20 <text name="DisplayResLabel">
21 表示解像度: 21 表示解像度:
22 </text> 22 </text>
23 <text name="AspectRatioLabel1" tool_tip="(幅/高さ)"> 23 <text name="AspectRatioLabel1" tool_tip="(幅/高さ)">
24 縦横比: 24 縦横比
25 </text> 25 </text>
26 <combo_box name="aspect_ratio" tool_tip="(幅/高さ)"> 26 <combo_box name="aspect_ratio" tool_tip="(幅/高さ)">
27 <combo_item type="string" length="1" name="4:3(StandardCRT)"> 27 <combo_item type="string" length="1" name="4:3(StandardCRT)">
@@ -104,7 +104,7 @@
104 </radio_item> 104 </radio_item>
105 </radio_group> 105 </radio_group>
106 <text name="AvatarRenderingText"> 106 <text name="AvatarRenderingText">
107 アバター表示: 107 アバター表示
108 </text> 108 </text>
109 <check_box label="アバターの精度を下げる" name="AvatarImpostors" /> 109 <check_box label="アバターの精度を下げる" name="AvatarImpostors" />
110 <check_box label="ハードウェア・スキニング" name="AvatarVertexProgram" /> 110 <check_box label="ハードウェア・スキニング" name="AvatarVertexProgram" />
@@ -117,14 +117,14 @@
117 </text> 117 </text>
118 <slider label="描画距離:" name="DrawDistance" /> 118 <slider label="描画距離:" name="DrawDistance" />
119 <slider label="最大パーティクル数:" name="MaxParticleCount" /> 119 <slider label="最大パーティクル数:" name="MaxParticleCount" />
120 <slider label="ポストプロセス品質:" name="RenderPostProcess" /> 120 <slider label="ポストプロセス品質" name="RenderPostProcess" />
121 <text name="MeshDetailText"> 121 <text name="MeshDetailText">
122 メッシュ詳細: 122 メッシュ詳細:
123 </text> 123 </text>
124 <slider label=" オブジェクト:" name="ObjectMeshDetail" /> 124 <slider label=" オブジェクト:" name="ObjectMeshDetail" />
125 <slider label=" フレキシプリム:" name="FlexibleMeshDetail" /> 125 <slider label=" フレキシプリム:" name="FlexibleMeshDetail" />
126 <slider label=" 樹木:" name="TreeMeshDetail" /> 126 <slider label=" 樹木:" name="TreeMeshDetail" />
127 <slider label=" アバター:" name="AvatarMeshDetail" /> 127 <slider label=" アバター" name="AvatarMeshDetail" />
128 <slider label=" 地形:" name="TerrainMeshDetail" /> 128 <slider label=" 地形:" name="TerrainMeshDetail" />
129 <slider label=" 空:" name="SkyMeshDetail" /> 129 <slider label=" 空:" name="SkyMeshDetail" />
130 <text name="PostProcessText"> 130 <text name="PostProcessText">
diff --git a/linden/indra/newview/skins/xui/ja/panel_preferences_web.xml b/linden/indra/newview/skins/xui/ja/panel_preferences_web.xml
index 48cfc23..0ed6c57 100644
--- a/linden/indra/newview/skins/xui/ja/panel_preferences_web.xml
+++ b/linden/indra/newview/skins/xui/ja/panel_preferences_web.xml
@@ -1,8 +1,7 @@
1<?xml version="1.0" encoding="utf-8" standalone="yes" ?> 1<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
2<panel label="ウェブ" name="web"> 2<panel label="ウェブ" name="web">
3 <radio_group name="use_external_browser" 3 <radio_group name="use_external_browser">
4 tool_tip="ヘルプ、Webリンクなどのために、外部Webブラウザを使用します。フル画面で実行している場合には推奨できません。"> 4 <radio_item name="external" tool_tip="ヘルプ、Webリンクなどのために、外部Webブラウザを使用します。フル画面で実行している場合には推奨できません。">
5 <radio_item name="external">
6 外部のウェブ・ブラウザー (Firefox, Safari, Internet Explorer) を使用 5 外部のウェブ・ブラウザー (Firefox, Safari, Internet Explorer) を使用
7 </radio_item> 6 </radio_item>
8 <radio_item name="internal"> 7 <radio_item name="internal">
diff --git a/linden/indra/newview/skins/xui/ja/panel_speaker_controls.xml b/linden/indra/newview/skins/xui/ja/panel_speaker_controls.xml
index 671888e..b82aace 100644
--- a/linden/indra/newview/skins/xui/ja/panel_speaker_controls.xml
+++ b/linden/indra/newview/skins/xui/ja/panel_speaker_controls.xml
@@ -14,7 +14,7 @@
14 </combo_item> 14 </combo_item>
15 </combo_box> 15 </combo_box>
16 </layout_panel> 16 </layout_panel>
17 <layout_panel name="moderate_chat_panel"> 17 <layout_panel name="moderate_chat_panel" font="SansSerifSmall">
18 <scroll_list name="speakers_list"> 18 <scroll_list name="speakers_list">
19 <column label="名前" name="speaker_name" /> 19 <column label="名前" name="speaker_name" />
20 </scroll_list> 20 </scroll_list>
@@ -24,7 +24,7 @@
24 </text> 24 </text>
25 <button name="mute_btn" 25 <button name="mute_btn"
26 tool_tip="この住人のボイスをミュート(消声)します。" /> 26 tool_tip="この住人のボイスをミュート(消声)します。" />
27 <check_box label="テキストをミュート(消字)" name="mute_text_btn" /> 27 <check_box label="テキストをミュート" name="mute_text_btn" />
28 </panel> 28 </panel>
29 </layout_panel> 29 </layout_panel>
30 <layout_panel name="moderator_controls"> 30 <layout_panel name="moderator_controls">
diff --git a/linden/indra/newview/skins/xui/ko/floater_chat_history.xml b/linden/indra/newview/skins/xui/ko/floater_chat_history.xml
index d821296..3c634d8 100644
--- a/linden/indra/newview/skins/xui/ko/floater_chat_history.xml
+++ b/linden/indra/newview/skins/xui/ko/floater_chat_history.xml
@@ -1,5 +1,5 @@
1<?xml version="1.0" encoding="utf-8" standalone="yes" ?> 1<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
2<floater name="chat floater" title="채팅 기록"> 2<floater name="chat floater" title=" 팅">
3 <button label="채팅" name="Chat" /> 3 <button label="채팅" name="Chat" />
4 <button label="차단" name="Mute resident" /> 4 <button label="차단" name="Mute resident" />
5 <check_box label="음소거된 텍스트 표시하기" name="show mutes" /> 5 <check_box label="음소거된 텍스트 표시하기" name="show mutes" />
diff --git a/linden/indra/newview/skins/xui/ko/floater_html.xml b/linden/indra/newview/skins/xui/ko/floater_html.xml
index 7974995..c99763e 100644
--- a/linden/indra/newview/skins/xui/ko/floater_html.xml
+++ b/linden/indra/newview/skins/xui/ko/floater_html.xml
@@ -5,4 +5,7 @@
5 <button label="홈" name="home_btn" /> 5 <button label="홈" name="home_btn" />
6 <button label="앞으로" name="forward_btn" /> 6 <button label="앞으로" name="forward_btn" />
7 <button label="이동" name="go_btn" /> 7 <button label="이동" name="go_btn" />
8 <string name="home_page_url">
9 http://kr.secondlife.com
10 </string>
8</floater> 11</floater>
diff --git a/linden/indra/newview/skins/xui/ko/floater_joystick.xml b/linden/indra/newview/skins/xui/ko/floater_joystick.xml
index e965738..dd0fe30 100644
--- a/linden/indra/newview/skins/xui/ko/floater_joystick.xml
+++ b/linden/indra/newview/skins/xui/ko/floater_joystick.xml
@@ -58,7 +58,7 @@
58 <text name="ZoomScale2"> 58 <text name="ZoomScale2">
59 확대/축소 크기 59 확대/축소 크기
60 </text> 60 </text>
61 <text name="ZoomDeadZone"> 61 <text name="ZoomDeadZone" width="140" left="0" >
62 확대/축소 사각지대 62 확대/축소 사각지대
63 </text> 63 </text>
64 <button label="SpaceNavigator 기본값" name="SpaceNavigatorDefaults" /> 64 <button label="SpaceNavigator 기본값" name="SpaceNavigatorDefaults" />
diff --git a/linden/indra/newview/skins/xui/ko/menu_viewer.xml b/linden/indra/newview/skins/xui/ko/menu_viewer.xml
index c59eefd..3abedaa 100644
--- a/linden/indra/newview/skins/xui/ko/menu_viewer.xml
+++ b/linden/indra/newview/skins/xui/ko/menu_viewer.xml
@@ -75,7 +75,7 @@
75 <menu_item_call label="말한 사람 보기" name="Look at Last Chatter" /> 75 <menu_item_call label="말한 사람 보기" name="Look at Last Chatter" />
76 <menu_item_separator label="-----------" name="separator" /> 76 <menu_item_separator label="-----------" name="separator" />
77 <menu_item_check label="툴바" name="Toolbar" /> 77 <menu_item_check label="툴바" name="Toolbar" />
78 <menu_item_check label="채팅 기록" name="Chat History" /> 78 <menu_item_check label=" 팅" name="Chat History" />
79 <menu_item_check label="통신" name="Instant Message" /> 79 <menu_item_check label="통신" name="Instant Message" />
80 <menu_item_call label="인벤토리" name="Inventory" /> 80 <menu_item_call label="인벤토리" name="Inventory" />
81 <menu_item_check label="액티브 스피커" name="Active Speakers" /> 81 <menu_item_check label="액티브 스피커" name="Active Speakers" />
diff --git a/linden/indra/newview/skins/xui/ko/mime_types.xml b/linden/indra/newview/skins/xui/ko/mime_types.xml
index 33d7e14..9d2348c 100644
--- a/linden/indra/newview/skins/xui/ko/mime_types.xml
+++ b/linden/indra/newview/skins/xui/ko/mime_types.xml
@@ -78,7 +78,7 @@
78 </label> 78 </label>
79 </mimetype> 79 </mimetype>
80 <mimetype name="image/*"> 80 <mimetype name="image/*">
81 <label label="image2_label"> 81 <label name="image2_label">
82 이미지 82 이미지
83 </label> 83 </label>
84 </mimetype> 84 </mimetype>
diff --git a/linden/indra/newview/skins/xui/ko/panel_chat_bar.xml b/linden/indra/newview/skins/xui/ko/panel_chat_bar.xml
index d10958f..febfe23 100644
--- a/linden/indra/newview/skins/xui/ko/panel_chat_bar.xml
+++ b/linden/indra/newview/skins/xui/ko/panel_chat_bar.xml
@@ -1,6 +1,6 @@
1<?xml version="1.0" encoding="utf-8" standalone="yes" ?> 1<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
2<panel name="chat_bar"> 2<panel name="chat_bar">
3 <button label="로컬 채팅" label_selected="기록" name="History" 3 <button label="로컬 채팅" name="History"
4 tool_tip="대화 내용을 보려면 여기를 클릭하십시오." /> 4 tool_tip="대화 내용을 보려면 여기를 클릭하십시오." />
5 <line_editor label="채팅하려면 여기를 클릭하십시오." name="Chat Editor" 5 <line_editor label="채팅하려면 여기를 클릭하십시오." name="Chat Editor"
6 tool_tip="Enter를 눌러 말하고, Ctrl-Enter를 눌러 외칩니다." /> 6 tool_tip="Enter를 눌러 말하고, Ctrl-Enter를 눌러 외칩니다." />
diff --git a/linden/indra/newview/skins/xui/ko/panel_group_invite.xml b/linden/indra/newview/skins/xui/ko/panel_group_invite.xml
index ea97438..338649f 100644
--- a/linden/indra/newview/skins/xui/ko/panel_group_invite.xml
+++ b/linden/indra/newview/skins/xui/ko/panel_group_invite.xml
@@ -1,10 +1,5 @@
1<?xml version="1.0" encoding="utf-8" standalone="yes" ?> 1<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
2<panel label="회원 초대" name="invite_panel"> 2<panel label="회원 초대" name="invite_panel">
3 <text>
4 여러 주민을 선택하여
5그룹에 초대할 수 있습니다. &apos;주민
6선택기 열기&apos;를 클릭하여 시작합니다.
7 </text>
8 <text name="help_text"> 3 <text name="help_text">
9 여러 주민을 선택하여 4 여러 주민을 선택하여
10그룹에 초대할 수 있습니다. &apos;주민 5그룹에 초대할 수 있습니다. &apos;주민
diff --git a/linden/indra/newview/skins/xui/ko/panel_group_notices.xml b/linden/indra/newview/skins/xui/ko/panel_group_notices.xml
index 7edb35b..c49fe9b 100644
--- a/linden/indra/newview/skins/xui/ko/panel_group_notices.xml
+++ b/linden/indra/newview/skins/xui/ko/panel_group_notices.xml
@@ -16,7 +16,7 @@
16 그룹 공지 16 그룹 공지
17 </text> 17 </text>
18 <text name="lbl2"> 18 <text name="lbl2">
19 공지는 30일 동안 보관됩니다. 보려는 공지를 다음에서 클릭하십시오. 19 공지는 14일 동안 보관됩니다. 보려는 공지를 다음에서 클릭하십시오.
20새로운 공지를 수령한 경우 &apos;새로고침&apos; 버튼을 클릭하십시오. 20새로운 공지를 수령한 경우 &apos;새로고침&apos; 버튼을 클릭하십시오.
21 </text> 21 </text>
22 <scroll_list name="notice_list"> 22 <scroll_list name="notice_list">
diff --git a/linden/indra/newview/skins/xui/ko/panel_preferences_web.xml b/linden/indra/newview/skins/xui/ko/panel_preferences_web.xml
index 8452e3b..6018ecf 100644
--- a/linden/indra/newview/skins/xui/ko/panel_preferences_web.xml
+++ b/linden/indra/newview/skins/xui/ko/panel_preferences_web.xml
@@ -1,8 +1,7 @@
1<?xml version="1.0" encoding="utf-8" standalone="yes" ?> 1<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
2<panel label="웹" name="web"> 2<panel label="웹" name="web">
3 <radio_group name="use_external_browser" 3 <radio_group name="use_external_browser">
4 tool_tip="도움말, 웹링크 등은 외부 웹브라우저를 사용하십시오. 전체 화면 모드에서는 권장하지 않습니다."> 4 <radio_item name="external" tool_tip="도움말, 웹링크 등은 외부 웹브라우저를 사용하십시오. 전체 화면 모드에서는 권장하지 않습니다.">
5 <radio_item name="external">
6 외부 웹 브라우저 사용(Firefox, Safari, Internet Explorer) 5 외부 웹 브라우저 사용(Firefox, Safari, Internet Explorer)
7 </radio_item> 6 </radio_item>
8 <radio_item name="internal"> 7 <radio_item name="internal">
diff --git a/linden/indra/newview/skins/xui/pt/panel_group_notices.xml b/linden/indra/newview/skins/xui/pt/panel_group_notices.xml
index f611485..f5698a7 100644
--- a/linden/indra/newview/skins/xui/pt/panel_group_notices.xml
+++ b/linden/indra/newview/skins/xui/pt/panel_group_notices.xml
@@ -11,7 +11,7 @@
11 Arquivo de notícias do grupo 11 Arquivo de notícias do grupo
12 </text> 12 </text>
13 <text name="lbl2"> 13 <text name="lbl2">
14 As notícias são mantidas por 30 dias. Clicar na notícia que você desejar ver. 14 As notícias são mantidas por 14 dias. Clicar na notícia que você desejar ver.
15 </text> 15 </text>
16 <scroll_list name="notice_list"> 16 <scroll_list name="notice_list">
17 <column label="" name="icon" /> 17 <column label="" name="icon" />
diff --git a/linden/indra/newview/skins/xui/zh/panel_group_notices.xml b/linden/indra/newview/skins/xui/zh/panel_group_notices.xml
index b0d5ab3..e6629cb 100644
--- a/linden/indra/newview/skins/xui/zh/panel_group_notices.xml
+++ b/linden/indra/newview/skins/xui/zh/panel_group_notices.xml
@@ -11,7 +11,7 @@
11 社团通知归档 11 社团通知归档
12 </text> 12 </text>
13 <text name="lbl2"> 13 <text name="lbl2">
14 通知只会被保留30日。点击下面你想查看的通知。如果新的通知已被接受到,请点击“刷新名单”按钮。 14 通知只会被保留14日。点击下面你想查看的通知。如果新的通知已被接受到,请点击“刷新名单”按钮。
15 </text> 15 </text>
16 <scroll_list name="notice_list"> 16 <scroll_list name="notice_list">
17 <column label="" name="icon" /> 17 <column label="" name="icon" />
diff --git a/linden/indra/newview/viewer_manifest.py b/linden/indra/newview/viewer_manifest.py
index d07ebf0..9751936 100755
--- a/linden/indra/newview/viewer_manifest.py
+++ b/linden/indra/newview/viewer_manifest.py
@@ -445,18 +445,20 @@ class LinuxManifest(ViewerManifest):
445 self.path("wrapper.sh","secondlife") 445 self.path("wrapper.sh","secondlife")
446 self.path("handle_secondlifeprotocol.sh") 446 self.path("handle_secondlifeprotocol.sh")
447 self.path("register_secondlifeprotocol.sh") 447 self.path("register_secondlifeprotocol.sh")
448 self.path("unicode.ttf","unicode.ttf")
449 self.end_prefix("linux_tools") 448 self.end_prefix("linux_tools")
450 449
451 # Create an appropriate gridargs.dat for this package, denoting required grid. 450 # Create an appropriate gridargs.dat for this package, denoting required grid.
452 self.put_in_file(self.flags_list(), 'gridargs.dat') 451 self.put_in_file(self.flags_list(), 'gridargs.dat')
453 452
453
454 def package_finish(self):
454 # stripping all the libs removes a few megabytes from the end-user package 455 # stripping all the libs removes a few megabytes from the end-user package
455 for s,d in self.file_list: 456 for s,d in self.file_list:
456 if re.search("lib/lib.+\.so.*", d): 457 if re.search("lib/lib.+\.so.*", d):
457 self.run_command('strip -S %s' % d) 458 self.run_command('strip -S %s' % d)
459 if re.search("app_settings/mozilla-runtime-.*/lib.+\.so.*", d):
460 self.run_command('strip %s' % d)
458 461
459 def package_finish(self):
460 if(self.args.has_key('installer_name')): 462 if(self.args.has_key('installer_name')):
461 installer_name = self.args['installer_name'] 463 installer_name = self.args['installer_name']
462 else: 464 else:
@@ -506,7 +508,6 @@ class Linux_i686Manifest(LinuxManifest):
506 self.path("libdb-4.2.so") 508 self.path("libdb-4.2.so")
507 self.path("libcrypto.so.0.9.7") 509 self.path("libcrypto.so.0.9.7")
508 self.path("libssl.so.0.9.7") 510 self.path("libssl.so.0.9.7")
509 self.path("libexpat.so.1")
510# self.path("libstdc++.so.6") 511# self.path("libstdc++.so.6")
511 self.path("libuuid.so", "libuuid.so.1") 512 self.path("libuuid.so", "libuuid.so.1")
512 self.path("libSDL-1.2.so.0") 513 self.path("libSDL-1.2.so.0")